Publishing Changelog

Changelog

21.19.0

Track entity type and adapt service before sending to Website Reports

New

  • Add entity details in SIA_Publishing_Public::send_website_network_activity()

Fix

  • Include ‘resource’ as a tracked post type in SIA_Publishing_Public::process_post_types_with_activity()

21.18.0

Add Summit Code of Conduct page to repository and sitemap

Include the new page into repositories, Tier 1 in the Experience section.

New

  • New ‘Code of Conduct’ (code-of-conduct) layout in SIA_Publishing_Layouts_Repository::summit_microsite_layouts()
  • Add the code-of-conduct-summit layout as Tier 2 in SIA_Publishing_Sitemap::inventory()

21.17.0

Move the sitemap bust to a later post update hook

New

  • Replace post_updated with wp_after_insert_post in SIA_Publishing::define_admin_hooks() and adapt the params in SIA_Publishing_Admin::post_updated()

21.16.0

Unify SIAYC ballot code validation file

New

  • Revert SIA_CF_field_CodeValidator::get_codes() to only load a single file
  • Create the single form code validator CSV in code-validations-siayc.csv. All other files are no longer in use

21.15.0

Unify SIAYC ballot code validation file

New

  • Revert SIA_CF_field_CodeValidator::get_codes() to only load a single file
  • Create the single form code validator CSV in code-validations-siayc.csv. All other files are no longer in use

21.14.0

Update SIAYC form field and validation data

New

  • Set candidate Uuids for voting 09.2025 in SIA_CF_field_YouthCouncilCandidate::get_options()
  • Create the code validator CSV in code-validations-siayc-2025-09-22.csv

21.13.0

Update SIAYC dates for conditional blocks to match September 2025

New

  • Update timestamps in process_youth_council_election_is_open()

29.12.0

Include Community Voting when evaluating main menu highlights

New

  • Evaluate ‘community-voting-landing-page-host’ in SIA_Publishing_Public::maybe_highlightPageInSitemap()
  • Check home page tier 4 sub-pages for highlights in SIA_Publishing_Sitemap::build_menu()

29.11.0

New Visegrad fund layout the application Banner block in host home page layout

New

  • Add a conditional Banner for application to the Host home page (home-page-host) in SIA_Publishing_Layouts_Repository::get_layouts()
  • Add the ‘Visegrad Fund: Interregional Non-Formal Learning Program for Young Social Entrepreneurs’ consortium page (visegrad-fund-international) to SIA_Publishing_Layouts_Repository::get_layouts()
  • Include the above layout (‘visegrad-fund-international’) in the international sitemap inventory (INTERNATIONAL_BLOG_ID) under ‘non-financial-partnerships-international’ in SIA_Publishing_Sitemap::inventory()

29.10.0

New CLI command to publish a team website

Needed fwhen a website is ready to be public. It deactivates the Restricted Site Access plugin, busts blog ids and websites.

New

  • Add the publish-website CLI publishing subcommand with a single assoc argument: site-id resolved by SIA_Publishing_WP_CLI::publish_website

29.9.0

New Elements block for grouped sub-items and adapted Incubation elements

Extend the Features component with a toned down “Elements” variant that has 2 distinctions: there are no icons, and it’s designed to work as an enumeration of sub-elements.

The ‘incubation-timeline’ block slug should be deprecated but it’s in use in production and the effort is not yet warranted. For now updating its handler to use Features and the verbiage suffices.

New

  • New “Elements” component in SIA_Publishing_Handler_Elements that is an ACF block placeholders and extends “Features” (SIA_Publishing_Handler_Features) without modification in order to provide a distinct block registered with ACF, added to $components in SIA_Publishing_Blocks_Repository::get_blocks_by_section(); added to $componentHandlers by SIA_Publishing_Context::requireComponentHandlers(); treated as a distinct config case in SIA_Publishing_Block::getContextOptions(), together with Features
  • Use “Features” as a the handlerId of the Incubation elements (incubation-timeline) in SIA_Publishing_Blocks_Repository::get_blocks_by_section()
  • Use the columns-2 modifier for Features when showing the “Incubation outline” config (block slug incubation-timeline) to accomodate for 4 elements with long lead text in SIA_Publishing_Handler_Features::populate()
  • Hard-code ‘Incubation elements’ (slug incubation-timeline) icons to the steps and content in SIA_Publishing_Handler_Features::populate_items()

Improvements

  • Update verbiage on the “Incubation elements” block in SIA_Publishing_Blocks_Repository::get_blocks_by_section() to reflect practical use: it’s 4 specific incubation features, not a timeline

29.8.0

Add GTM parameters to main menu hightlight item

Improvements

  • When a menu item isHighlight, add gtm parameters form SIA_Publishing_Sitemap::formatMenuItem()

29.7.0

Highlight the Apply sitemap post in the site navigation when the application is open

Add a new filter to set highlights in a sitemap’s inventory and, consequently, its menu.

New

  • Mark posts that need highlighting in the main menu from SIA_Publishing_Sitemap::associate_posts() by applying the sitemap/highlight_posts filter to set a layout’s isHighlighted in $flat
  • When an item isHighlighed in the $flat, set highlight to TRUE from SIA_Publishing_Sitemap::formatMenuItem()
  • While iterating the inventory to build the menu, set $highlightItem when an item has 'highlight' set and later add it after the home link from SIA_Publishing_Sitemap::build_menu()
  • Filter the application layout’s sitemap highlight (about-application-host) to check if the A&AP is open from SIA_Publishing_Public::maybe_highlightPageInSitemap() hooked to sitemap/highlight_posts from SIA_Publishing::define_public_hooks()

Improvements

  • Improve the distinction between a block hidden due to it’s condition by adding a lighter (--lighter) colored background type (display backgroundType) based on the error level from SIA_Publishing_Component_Handler_Abstract::context()
  • Use the callout’s error background in Page section from SIA_Publishing_Handler_PageSection::context()

29.6.0

Display the venture hightlight for SIAYC members

  • Add is_council_member as a switch to SIA_Publishing_Handler_Profile->populate()
  • Retire the “council_is_elected” condition. It’s a one-off and can be handled manually

29.5.0

Create a “View English version” control in Implementation settings showing the Stencil value

The purpose is to: A. view the full English Stencil original while translating (it would disappear while writing); B. be reminded of the original while reviewing translations a year later (the translation may be way off from the starting point).

New

  • a345ae175 2025-03-05 Show English original in Implementation for translated values (tag: v21.52.2) by showing the stencil value ($config->getStencilValue()) from SIA_Publishing_Admin::prefill_settings_values()

Fixes

  • ed6afb1fb 2025-03-05 Display original English text for untranslated WYSYWYG fields as the “placeholder” attribute doesn’t work on textareas from SIA_Publishing_Admin::prefill_settings_values() (tag: v21.52.1)

29.4.0

Add Youth Council pages to repository and sitemap

Include the 4 new page into repositories and include the ballot CF7 CTA into the block conditions.

New

  • Add 3 Youth Council specific layouts to International inventory: Youth Council Ballot Submission (youth-council-ballot-submission-landing-page-international), Preview (youth-council-candidate-profile-review-landing-page-international), Youth Council (youth-council-international)
  • Add a generic post-vote redirect target layout to International inventory ‘Thank you for your vote!’ (thank-for-your-vote-international)
  • Include the voting ballot in the open SIAYC voting condition in SIA_ACF_field_BlockCondition::get_options() and in SIA_Publishing::ACF_BLOCK_FIELD_IDS as youth-council-voting-ballot

Improvements

  • Create conditions for applying a layout only as meta value as an assoc arg --preserve-layout in SIA_Publishing_WP_CLI::set_layout() and 4th boolean argument to SIA_Publishing_Layout::applyTo()

29.3.0

Validate CF7 code validator against CSV file

When a form’s post name points to a validator CSV, add the codes found in the file to the allowed values.

New

  • Include the contents of a file with the basename in SIA_CF_field_CodeValidator::CODES in SIA_CF_field_CodeValidator::get_codes() called by SIA_CF_field_CodeValidator::validation_filter()

29.2.0

Validate CF7 code validator against CFDB7 table records

Rely on the Contact Form CFDB7 recorded form entries to ensure single code usage

New

  • New service searching in the DB for a code in a form entry in SIA_CF_field_CodeValidator::get_submission_by_code() used by SIA_CF_field_CodeValidator::validation_filter()

29.1.0

Add script redirect for CF7 form submissions

When a post id is found, redirect after the email is sent

New

  • Check if a CF7 form has a redirect_to in additional settings from SIA_Publishing_Handler_CTA::populate_form() and attach a redirect callback

29.0.0

Create the custom form fields for a voter ballot

New one-time-code and youth council candidate form fields.

New

  • New code validator CF7 field type in SIA_CF_field_CodeValidator (text form control)
  • New Youth Council candidate CF7 field type in SIA_CF_field_YouthCouncilCandidate (single select form control)
  • Register the field classes (which in turn hook into filters) from SIA_Publishing_Public::wpcf7_handle_form_fields() called by SIA_Publishing::define_public_hooks() directly
  • Include the 2 classes from SIA_Publishing::load_dependencies()`

28.2.0

Prepare for display of profiles without headshot

Theoretically the “mistery man” is generated as a profile photo or thumbnail, but not for SIAYC candidates.

Improvements

  • Make sure a profile without thumbnail doesn’t trip the index card in SIA_Publishing_Twig::get_indexCard_context() or SIA_Publishing_Handler_Profile::populate()

28.1.0

Conditional Youth Council candidates block with Venture phase profile hightlight and tighter display

New

  • Display warning to editors based on block condition in SIA_Publishing_Handler_Profiles::populate()
  • Set candidate profile view mode as list-item in SIA_Publishing_Handler_YouthCouncilMembersAndCandidates::context()
  • Allow extension classe to set the view_mode in by checking if set in SIA_Publishing_Handler_Profiles::populate()
  • New youth_council_election_is_open block condition in SIA_ACF_field_BlockCondition::get_options() based on the field parent and processed by process_youth_council_election_is_open()
  • Venture phase as highlight for candidate Profile in SIA_Publishing_Handler_Profile::highlight()

Improvements

  • Block condition populated by default for all handlers in SIA_Publishing_Component_Handler_Abstract::populate() calling populate_blockConditionFulfilled() and removed redundant from SIA_Publishing_Handler_CTA::populate()
  • Track ACF field ids in SIA_Publishing::ACF_BLOCK_FIELD_IDS (now only for youth-council-candidates) to facilitate context aware choice selection in block condition ACF fields

28.0.0

New blocks for Youth Council candidates and members from the network

To provide election material (candidate profiles) and afterwards display the members of the council, create 2 new distinct blocks. Adapt to the new behavior getting profiles from the network in the board members block.

New

  • New “Youth Council Members” component handler with heading and lead, determining the community role based on the block slug, and fetching profiles from the entire site via SIA_Profiles_Public::get_site_profiles() in added to SIA_Publishing_Blocks_Repository::get_blocks_by_section(), handled by the new SIA_Publishing_Handler_YouthCouncilMembersAndCandidates, loaded in SIA_Publishing_Context::requireComponentHandlers()
  • Adapt SIA_Publishing_Handler_Profiles::populate() to check if an extension class object has a populate_profiles() that overloads the data['posts'] variable to bypass Component_With_Entities_Trait::posts()
  • Use populate_profiles() the in board member profiles handler extension to prepare for a Steering Board that has SIAYC members coming from local websites
  • Adapt the profile post handler to hide the kind of the index card of council members or candidates in SIA_Publishing_Handler_Profile::populate() and to not use the Play profile adapter URLs for board members who are also council members

Improvements

  • Track ACF group ids in SIA_Publishing::ACF_BLOCK_GROUP_IDS (now only for board-members and local-team) to facilitate context aware choice selection in custom community role ACF fields
  • The team-international layout block order matches current usage in SIA_Publishing_Layouts_Repository::get_layouts()

27.1.1

Improve error handling of footer Program partners

When the partners are tiered and there was a notice, all partners would be hidden from anonymous users while editors would see an erroneous default error message.

Now:

  1. the block is shown even with incomplete data to anonymous users when the error level is “notice”
  2. editors see the notice of “X partner organization(s) missing”

Fixes

  • SIA_Publishing_Handler_Organizations::context() includes error data about “featured” and “partner”
  • SIA_Publishing_Context::localPartners() shows content when the error level is ‘notice’

27.1.0

Include Regional funding partners in the footer context

New

  • Add the Regional funding partner partnership type (PARTNERSHIP_TYPE_REGIONAL_FUNDING) to the local partners footer block in SIA_Publishing_Context::localPartners()

27.0.0

New blocks for Timeline and Section Header

For better landing pages, specifically Youth Council elections, provide a Section Header as a separator, and an editable Timeline (instead of a class extended by multiple config timelines).

To ehnahnce the timeline, allow for ranges (e.g. March or 2025) or date-only dates (so no time) instead of the default date and time.

New

  • Enhanced “Timeline” component handler for editable timelines added to SIA_Publishing_Blocks_Repository::get_blocks_by_section(), handled by SIA_Publishing_Handler_Timeline with new __construct() switches for handling an ACF repeater of dates
  • New “Section Header” component handler with sub, supra, and heading, plus deco, added to SIA_Publishing_Blocks_Repository::get_blocks_by_section(), handled by the new SIA_Publishing_Handler_SectionHeader, loaded in SIA_Publishing_Context::requireComponentHandlers()
  • Enhance the Twig date processor to simplify display based on modifiers: show a range as month (freetext) or a date context with no time (no-time) in SIA_Publishing_Twig::get_date_context()

26.0.0

Add Impact Blueprint layout to the navigation under stories

New

  • Move the impact blueprint layout (impact-blueprint-landing-page-international) from tier 4 under home-page-international to tier 2 under stories (articles-international) in SIA_Publishing_Sitemap::inventory()

25.0.0

Provide Profile video embed context to the Profile entity

When the video embed URL is found in a profile instance, send it to the Twig context.

New

  • Create the video embed context in the Profile component handler by populating the new SIA_Publishing_Handler_Profile::$embed context array in the new SIA_Publishing_Handler_Profile::embed()

Improvements

  • Include a grid view mode for the Resources group’s collection in SIA_Publishing_Handler_Resources::populate()

Fixes

  • Show the Resource’s lead text by applying the nullifier only in a modal in SIA_Publishing_Handler_Resource::context()
  • Add resource as a post type with sharing to the SIA_Publishing_Sharing::POST_TYPES_WITH_SHARING constant array
  • Prevent warning when the Features component has no $iconsSection set in SIA_Publishing_Handler_Features::populate_items()

24.1.0

Replace newsletter CTA with mailinglist in the site footer

To finish the transition to Mailjet (ironically while the account is blocked), replace the MailChimp form with a Mailjet mailing list form in the website footer.

New

  • Replace the newsletter type CTA with a Mailing list (SIA_Publishing_Handler_CTAMailingList) with the spark mailing_list in SIA_Publishing_Context::siteNewsletter() and send the same text as gdpr_notice
  • Account for a GRPD notice in a Mailing List context in SIA_Publishing_Handler_CTAMailingList::populate_mailingListForm()

24.0.0

New Banner with photo area variant

Adapt and pass through block settings to display a Banner with a positioned photo area (i.e. a full 33% column)

  • Account for the section positioned background variant in SIA_Publishing_Component_Handler_Abstract::backgroundImageVariants()
  • Commend new position and size options in the SIA_Publishing_Handler_Banner::context() DocBlock

23.0.0

Localized component scripts used by Mailing list for Impact Blueprint

Provide a path for components to localizing and registering custom JS in order for the new Impact Blueprint multi-list Mailjet subscriber to be able to do its and be configured and processed safely on the server. Remove the need to use the overkill layouts debugger .env constant when layouts are deployed incomplete and hard-code “free to edit” layouts where they are defined.

New

  • Add a unique identified for each mailing list to prevent config conflicts in SIA_Publishing_Handler_CTAMailingList::$mailingListUuid
  • Filter ajax requests in SIA_Publishing_Handler_CTAMailingList::ajax_process_submission() hooked to process_ajax_requests from SIA_Publishing_Handler_CTAMailingList::filter_ajax_requests() and identify the mailing_list_form consumer registered while localizing a JS variable
  • Localize unique JS variables in SIA_Publishing_Handler_CTAMailingList::enqueue_javascript(): consumer, a confirmation message, and the ajax URL
  • Give components the opportunity to use specific hooks by calling the new abstract SIA_Publishing_Component_Handler_Abstract::defineHooks() method from __construct()
  • New abstract SIA_Publishing_Component_Handler_Abstract::enqueue_javascript() method there for overloading
  • Start providing a unique component id as $componentUuid created in the constructor from the component name and a random string from wp_generate_password()
  • Provide modules a blanket callback action for AJAX requests SIA_Publishing_Public::process_ajax_requests() registered very early by SIA_Publishing::define_public_hooks() hooked to wp_ajax_sia_publishing and wp_ajax_nopriv_sia_publishing and only doing a filter call for process_ajax_requests to allow scripts that come late to hook into it

Improvementa

  • Finally provide editors with “special” layouts that are free to update by implementing a SIA_Publishing_Layout::$bypassAllowedBlocks that reads from the layouts repository and is considered in SIA_Publishing_Admin::allowed_block_types(). Use it to configure the impact-blueprint-landing-page-international layout in SIA_Publishing_Layouts_Repository::get_layouts() by adding 'bypassAllowedBlocks' and setting it to TRUE

22.1.0

Impact Blueprint branding via individual styles for layouts

New class assignemnt for campaign branded layouts which removes the SIA theme and adds a ca- prefixed theme. Now it’s hard-coded for the Impact Blueprint.

New

  • New overdue helper to get the layout of the currently viewed post in the static SIA_Publishing_Layout::getLayoutSlugFromQueriedObject() that takes no arguments but returns the layout from meta in the right conditions
  • New hard-coded body class for Impact Blueprint ca-impact-blueprint added by SIA_Publishing_Context::bodyClass(), also removing the t-[impact theme] class
  • New process to insert campaign styles in SIA_Publishing_Public::enqueue_layout_specific_styles() hooked from SIA_Publishing::define_public_hooks() to wanda_enqueue_styles action called in Wanda::enqueue_styles(), now including Impact Blueprint fonts and campaign styles

22.1.0

Impact Blueprint mailing list CTA component

An universal mailing list subscriber that can also display additional (Mailjet) lists as opt-ins, plus a basic Mailjet embed component that prevents HTML block content being “cleaned-up” when a non-super-admin edits a page.

New

  • New component handler ‘Mailing List Subscription CTA’ in SIA_Publishing_Handler_CTAMailingList loaded from SIA_Publishing_Context::requireComponentHandlers()
  • New block ‘cta-mailing-list’ added to the $collections array in SIA_Publishing_Blocks_Repository::get_blocks_by_section() using handlerId ‘CTAMailingList’ and making the connection to the ‘Mailing List Subscription CTA’ ACF field group
  • New component handler ‘Mailjet embedded form’ in SIA_Publishing_Handler_MailjetEmbeddedForm loaded from SIA_Publishing_Context::requireComponentHandlers()
  • New block ‘mailjet-embedded-form’ added to the $collections array in SIA_Publishing_Blocks_Repository::get_blocks_by_section() using handlerId ‘MailjetEmbeddedForm’ and making the connection to the ‘Mailjet embedded form’ ACF field group

22.0.0

Impact Blueprint communications campaign materials

In order to show all episodes as a list and individually in modals, create a resource post type that can show video embeds.

A new resource post type for adding episodes and a blank layout repository for the landing page; resources component loading the entities as a list; group template; layout for the landing page added to the International website sitemap; details ACF group loaded in the new post type.

New

  • New Resource (resource) post type in SIA_Publishing_Post_Types_Repository::get_post_types() supporting “title”, “editor”, “excerpt”, “author”, “thumbnail”, “revisions”
  • New entity post type wrapper in SIA_Publishing_Resource included in SIA_Publishing::load_dependencies()
  • Add the Resource Details ACF group connected to the resource post type to SIA_Publishing::$ACF_POST_FIELD_GROUP_IDS['resource']
  • New post handler ‘Resource’ loading entities in SIA_Publishing_Handler_Resource providing twig context
  • New component handler ‘Resources’ loading entities in SIA_Publishing_Handler_Resources loaded from SIA_Publishing_Context::requireComponentHandlers()
  • New block ‘resources’ added to the $collections array in SIA_Publishing_Blocks_Repository::get_blocks_by_section() using handlerId ‘Resources’ and making the connection to the Resources ACF field group
  • New landing page layout for the Impact Blueprint ‘impact-blueprint-landing-page-international’ added to SIA_Publishing_Layouts_Repository::get_layouts()
  • Registered impact-blueprint-landing-page-international in sitemap for the INTERNATIONAL_BLOG_ID location via SIA_Publishing_Sitemap::inventory()

Improvements

  • Improve placeholders and language handling of locked KPI fields and field groups in SIA_Publishing_Admin::prefill_settings_values()

21.5.0

Bring back user activity posting to remote

Improvements

  • Bing back user updates in SIA_Publishing_Public::send_website_network_activity()

21.4.0

Provide a GMT timestamp normalizer

To get UTC timestamps, convert the param based on the blog’s GMT offset.

New

  • Add the static SIA_Publishing::getGMTTimestamp() with a $timestamp parameter and return of the GTM timestamp

21.3.1

Don’t show Ventures without media in Community Voting

Improvements

  • Run through posts in SIA_Publishing_Handler_CommunityVoting::populate_ventures() and skip them if they have no video and no thumb
  • Improve the error message in SIA_Publishing_Handler_CommunityVoting::context() for when there are imported, but not read ventures
  • Don’t send useless option updates to Airtable from SIA_Publishing_Public::send_website_network_activity()
  • Halt all user updates for now in SIA_Publishing_Public::send_website_network_activity()

21.3.0

Allow CTA sending visitors directly to the A&AP registration page

Process a new option called “A&AP landing page” in the CTA block and, when it’s set to send visitors directly to the registration page, comply.

The use case is: from the “About application host” layout, which already contains eligibility criteria and a timeline, it no longer makes sense to send users to the A&AP home page which contains xactly the same information.

Only became relevant after 2024’s A&AP update which moved the registration form out of the home page.

New

  • Process the aap_landing_page $data key in SIA_Publishing_Handler_CTA::populate_target() and, when present, or one of url or registration_url, use the respective AAP class property

21.2.0

Update host social media landing page

Improvements

  • Finalize the Social Media Landing Page (v1) (social-impact-award-landing-page-host) blocks in SIA_Publishing_Layouts_Repository::get_layouts()
  • Make some progress on the Global events agenda block with the new Global events handler in SIA_Publishing_Handler_GlobalEvents extending SIA_Publishing_Handler_Events
  • Update the handlerId of global-events-agenda to GlobalEvents
  • Include GlobalEvents in SIA_Publishing_Context::requireComponentHandlers()

Fixes

  • Fix switch blocking execution of network wide deploy-layout CLI command when there was no site arg ignoring network in SIA_Publishing_WP_CLI::deploy_layout()

21.1.1

Don’t show empty page sections to anonymous visitors

When getPostIdByLayoutSlug() returned a WP_Error for anonymous visitors, not a numeric value, because of the behavior of get_post_status(), it would simply consider the WP_Error as null and return the status of the current page and the handleError() would fail.

Fixes

  • Check if the return of SIA_Publishing_Layout::getPostIdByLayoutSlug() is a WP_Error before checking post status in SIA_Publishing_Component_Handler_Abstract::populate_target()
  • Replace “Callout” with $this->$component in SIA_Publishing_Component_Handler_Abstract::populate_target()

Improvements

  • Replace CTA with the current component when checking "show_block/{$this->component}" and use it to hook maybe_showPageInSitemap() to show_block/callout instead of using CTA universally
  • Remove the overload SIA_Publishing_Callout::populate_target() completely and move its single switch for an empty data handler into SIA_Publishing_Component_Handler_Abstract::populate_target()

21.1.0

Display Event field values in admin table

New

  • Include type, topic, adapted schedule, and focus area in Events admin table by hooking SIA_Publishing_Admin::set_custom_post_columns_tribe_events() to manage_tribe_events_posts_columns from SIA_Publishing::define_admin_hooks()

21.0.0

Customizable landing page elements available to editors

  • Pages can be set as landing pages with custom theme and excluded elements
  • Icon available for the public with limited categories
  • Banners with CTA links or buttons, positioned background, and editable layouts
  • Features block for editors
  • More reusable abstract methods available to components, like variant, background, or layout processing

New

  • Add property to context to hold critical publishing properties, called SIA_Publishing_Context::$publishingOptions and populated from the “Publishing” ACF group and the layout slug post meta
  • Simplify Banner variant settigns by splitting them into layout, background, and variant fields processed in variants()
  • Provide a generic Features block to editors via the Deployment ACF group and adding it to the SIA_Publishing_Blocks_Repository::get_blocks_by_section() as features
  • Adjust the Features handler to process settings like the icons, instead of automatically selecting icons when Features is the handler id for other components’ block (e.g. Service clusters)
  • Provide standardized font size for theme consuption from SIA_Publishing_Theme_Repository::get_available_sizes(), used in Wanda::format_font_size_for_theme_support() hooked to editor-font-sizes by add_theme_support()
  • Provide standardized icon theme consumption from SIA_Publishing_Theme_Repository::get_icon_categories(), used in SIA_ACF_field_Icon::render_field_settings()
  • Move variant out of Banner and Callout and add background type methods (in)to SIA_Publishing_Component_Handler_Abstract::variants() and backgroundType() respectively
  • Add a populate_target() method to the SIA_Publishing_Component_Handler_Abstract and use in Banner populate() when needed
  • Process the layout display context key in SIA_Publishing_Twig::get_component_class() and add it to variants
  • Add a setting to the Icon field in SIA_ACF_field_Icon::render_field_settings() to limit the categories usable by editors in the Banner or Features

Improvements

  • Allow the HTML block for certain roles from SIA_Publishing_Admin::allowed_block_types()
  • Universaly add a <p> element to a lead automatically from the Component_With_Heading_And_Lead_Trait::populate_lead(), as it was needed in Features
  • Remove meta location and content from Event entity when showing condensed view mode from SIA_Publishing_Handler_Event::context() and don’t load tags in meta(), and remove the duplicate from SIA_Publishing_Handler_Events::populate()

Fixes

  • Fix CTAs being forwarded to published posts on restricted websites by unsetting restricted teams’ websites in SIA_Publishing_Handler_CTAForwarder::teams()

20.2.0

Display Event registration links, hide disfuctional venue links

New

  • Update translation files

Fixes

  • Display the registration url in full Events by loading the $registrationUrl in SIA_Publishing_Event::__construct() and adding it to the list of fields in SIA_Publishing_Handler_Event::fields() to be consumed by context
  • Hide venue links when there’s no address (e.g. the “Online” location hack editors use)

20.1.0

Include an events list in Host landing page with the new condensed view mode

New

  • Start processing a view_mode in SIA_Publishing_Handler_Events::populate() and unset the ‘content’ key to provide a condensed view for the new condensed view_mode

20.0.0

Call an action hook immediately after saving Stencil and Implementation options

Create the hook for when Stencil options are saved and after saving Implementation and Stencil settings call a “do_action” to allow other plugins to react.

New

  • Add a do_action( 'saved_implementation_options' ) that takes one parameter, the $updatedConfig after saving Implementation options in SIA_Publishing_Admin::save_implementation_options() hooked to acf/save_post
  • Create SIA_Publishing_Admin::save_stencil_options() that posts to the activity service and is hooked to acf/save_post in SIA_Publishing::define_admin_hooks()
  • Add a do_action( 'saved_stencil_options' ) that takes no parameters after saving Stencil options in SIA_Publishing_Admin::save_stencil_options() hooked to acf/save_post
  • Create SIA_Publishing_Config::exportToAAP() as a P.O.C. that would send updates to the current website’s team A&AP platform when existing

19.4.0

Fix A&AP timeline showing incorrect times caused by summer time offset changes

The gmt_offset option fails when calculating summer time timestamps while still in “default” time, and the other way around.

New

  • Add a helper to calculate the offset of a timestamp in SIA_Publishing::addGMTOffset()
  • Use the helper in SIA_Publishing::format_date()
  • Use the offset calculator when returning the raw value in SIA_ACF_field_setting_dataSource::format_value() in the A&AP cases when returing raw timestamps

Fixes

  • Replace isset() with array_key_exists() to prevent running queries in Component_With_Entities_Trait::posts() when the $data['posts'] is already nullified, for example in CommunityVoting::populate_ventures()

19.3.0

Create a Landing Page license placement layout

Partly duplicate the “Social Media Landing Page International” layout to Host license placement.

New

  • Add social-impact-award-landing-page-host to SIA_Publishing_Layouts_Repository::get_layouts() with placementType ‘license_id’ and placement ORGANIZATION_STATUS_HOST
  • Add social-impact-award-landing-page-host to SIA_Publishing_Sitemap::inventory() in the ORGANIZATION_STATUS_HOST key
  • Create a CLI subcommand to deploy a new layout with deploy-layout taking either ‘network’ or a site ID as a parameter in SIA_Publishing_WP_CLI::deploy_layout()

19.2.0

New ‘Publishing’ settings for microsites and Partner block view modes

New

  • Use the new Partnership options page to set main event details included in ACF_SETTING_FIELD_GROUP_IDS and ACF_OPTION_PAGE_SLUGS
  • Bring ‘Partner tiers’ into microsites via the new “Publishing” ACF group and options page
  • Add a new condition for sitemap inclusion via maybe_showPageInSitemap() hooked to show_block/cta that looks at the Publishing event registration settings
  • Adapt the teaser view mode to list-item in SIA_Publishing_Handler_Partners::context()

19.1.1

Fix missing speakers and topics from Event Agenda

Fixes

  • Address the 'speakers' switch case in SIA_Publishing_Handler_EventAgenda::process_agendaItem()
  • Fix the 'topics' switch case output

19.1.0

New Entity embed Gutenberg block and mature Venues

New

  • Create the “Entity embed” handler (SIA_Publishing_Handler_EntityEmbed) that wraps around a selected entity to be used to embed Venues in the Summit Location page
  • Add the entity-embed key to the component section of the SIA_Publishing_Blocks_Repository::get_blocks_by_section() with the EntityEmbed hander id loaded by SIA_Publishing_Context::requireComponentHandlers()
  • Mature, stable view modes and maps in Venues, with overloaded thumbnail() to display a static Google map in the list-item view
  • With mature Venues, add the $venue variable and $address to SIA_Publishing_Event
  • Adapt SIA_Publishing_Context methods to the is_embed() possibility
  • Add a static Google map precessor to SIA_Publishing_Twig::get_googleStaticMap_context() that returns an image map used by Venue’s list-item view mode
  • Add the $post_status variable to SIA_Publishing_Entity_Handler_Abstract, set it in SIA_Publishing_Entity_Handler_Abstract::initialize() and reuse it wherever the post status was needed
  • Return NULL from SIA_Publishing_Entity_Handler_Abstract::context() when the current visitor has no access
  • Add access() to SIA_Publishing_Entity_Handler_Interface
  • Set the blend-in display modifier by default to all auto-generated pageLead contexts when there’s no set hero from SIA_Publishing_Entity_Handler_Abstract::pageLead()
  • Stop automatically generating a byline meta context outside of posts from SIA_Publishing_Entity_Handler_Abstract::meta() given that it’s the first key to be unset in all class extensions
  • Extend SIA_Publishing_Entity_Handler_Abstract::categories() with a taxonomy parameter to be reused in SIA_Publishing_Entity_Handler_Event who uses tribe_events_cat as a taxonomy
  • Start overloading SIA_Publishing_Entity_Handler_Abstract::meta() instead of adjusting the 'context' in Event (adds location), Press mention (adds created), and Venue (adds location)

Fixes

  • Stop counting on The Event Calendar for getting a complete address and load a decorated WP_POST via tribe_get_venue_object() in __construct() and then use own method in SIA_Publishing_Venue::get_address()
  • Improve the address parameter sent to Google maps by managing it in SIA_Publishing_Venue::__construct() to make it more detailed
  • Fix possibility to load an entity for users without proper access by returning NULL in context() overloads of all handlers in includes/post-handlers
  • Fix Breadcrumbs on single layer sitemaps (e.g. Summit or Retreat) getting stuck on the first inventory item by making all summit and retreat home page children arrays, and thus string layout slug keys, even when they have no own children in SIA_Publishing_Sitemap::inventory()

19.0.0

New Venue entity class and handler

New

  • New Venue class in SIA_Publishing_Venue as an adapter for tribe_venue required in SIA_Publishing::load_dependencies()
  • New Venue post handler in SIA_Publishing_Handler_Venue building context for the Component Library and adapted from tribe_venue in SIA_Publishing_Entity_Handler_Abstract::instantiateHandler()

18.0.0

New Event agenda Gutenberg block

An agenda that lists days, time slots, and, when needed, parallel sessions. And public Venue posts via a filter because… Event Calendar needs a pro license to have public venues…

New

  • New Event agenda block in the repository processed by SIA_Publishing_Handler_EventAgenda and required in SIA_Publishing_Context::requireComponentHandlers()
  • Add the block id to the Component handler abstract (SIA_Publishing_Component_Handler_Abstract::blockId) in order to parse repeater blocks, used in the Event agenda
  • Make Event venues public by altering the post type in SIA_Publishing_Public::alter_post_types() hooked to register_post_type_args in SIA_Publishing::define_public_hooks()

17.0.0

Universal Wanda deployment and wipeout

Create 2 new CLI commands that create Wanda pages without on brand new websites, ignoring the migration Version Switch plugin completely

New

  • New WP_CLI subcommand to deploy Wanda deploy-wanda in SIA_Publishing_WP_CLI::deploy_wanda()
  • New WP_CLI subcommand to wipeout Wanda deploy-wanda in SIA_Publishing_WP_CLI::wipeout_wanda()
  • New helper to create Wanda pages in SIA_Publishing_WP_CLI::createAllWandaPages()

Improvements

  • Move all v20.21 commands to the bottom of SIA_Publishing_WP_CLI given that they will no longer be used

Fixes

  • When cloning a layout’s content from Stencil, include the Stencil title of the post in SIA_Publishing_Layout::clonePostContent()

16.2.0

Add the Summit microsite inventory and layouts

Add the layouts to the repository, the pages to the sitemap inventory, and a new block for and Eventbrite embedded checkout.

Create a new, simpler, method of adding per-location layouts, that only adds the placement suffix and values outside the layouts array for a more concise creation

New

  • New Eventbrite checkout component handler with an event id as a parameter in SIA_Publishing_Handler_EventbriteCheckout loaded by SIA_Publishing_Context::requireComponentHandlers()
  • New Eventbrite checkout block in the block repository in the components section of SIA_Publishing_Blocks_Repository::get_blocks_by_section()
  • Filter the Summit Speakers layout (speakers-summit) out when there are no Profiles from SIA_Publishing_Public::maybe_showPageInSitemap() hooked to sitemap/associate_posts
  • Add the Summit sitemap to SIA_Publishing_Sitemap::inventory()
  • Add the Summit minimal layout definitions to SIA_Publishing_Layouts_Repository::get_layouts()
  • Use a per-site method to register location specific layouts with the new model SIA_Publishing_Layouts_Repository::summit_microsite_layouts() that lists placement agnostic layouts initially in an array, and then passess them throught the new SIA_Publishing_Layouts_Repository::localize_layouts() that adds slug fixes and placement data

Fixes

  • Fix Fatal thrown on a new blog by SIA_ACF_field_CF7Form::get_options() caused by the missing Contact Forms 7 plugin

16.1.0

Clean Venture modal display of full variant

New

  • Don’t show the footer newsletter form in the community voting template by checking for the current page’s template layout in SIA_Publishing_Context::signupOrFollow()
  • Introduce the $variant class variable in SIA_Publishing_Entity_Handler_Abstract that is set via the variant() method that looks for $_GET['variant'] in order to adapt the full entity variant to a modal view
  • Remove the SIA_Publishing_Entity_Handler_Abstract::$workflowInfo in modal variants
  • Hide Page Lead breadcrumbs in modal variants from SIA_Publishing_Entity_Handler_Abstract::pageLead()
  • Set the $can_vote or $has_voted voting variable in CommunityVoting::populate_votingDetails()
  • Set the $maxVotes class variable in CommunityVoting
  • Show a “Share” label to clarify the distinction between the share and the index card social links in SIA_Publishing_Handler_CTA::context() and add the sharing variant class in populate_socialLinks()
  • Updated language files

Fixes

  • Make sure the PageLead::context() doesn’t overwrite the $data property to preserve the set variant
  • Show Venture SDGs and Meta also when there’s no embed by fixing the $view_mode == 'full' condition in SIA_Publishing_Handler_Venture::context()
  • Don’t send over an empty array from SIA_Publishing_Twig::get_socialLinks_context() by replacing is_null() with empty()

16.0.0

Remove all admin translation suggestions and update POs

New

  • Generate all language files in languages
  • Delegate Community Voting strings to new SIA Project Voting helpers (spv_voting_instructions and spv_public_status_message) to isolate language files

15.13.0

New Community Voting component handler

For now it gathers the current SIA_Competition ventures to show together with possible issues (e.g. post status details) and a clearer workflow info.

New

  • Create the Community Voting component in SIA_Publishing_Handler_CommunityVoting and populate it with the current SIA_Competition ventures
  • Add ‘CommunityVoting’ as handlerId to communty-voting in SIA_Publishing_Blocks_Repository::get_blocks_by_section()
  • Load the CommunityVoting component handler from SIA_Publishing_Context::requireComponentHandlers()
  • Add a new permission constant in SIA_Publishing::MANAGE_PERMISSION set to ‘manage_options’
  • Set specific post_type properties where necessary (Organization, Team, and Venture) in entity handlers to use in SIA_Publishing_Entity_Handler_Abstract::access()
  • Set the post_type either to the component or the entityType property in SIA_Publishing_Entity_Handler_Abstract::__construct()
  • Create an access checker in SIA_Publishing_Entity_Handler_Abstract::access() that takes an operation and tries to figure out if the current user has the corresponding permission
  • Introduce issues (e.g. the status) to entities from SIA_Publishing_Entity_Handler_Abstract::issues(), for now showing details about what the status’s effect is, for example when it’s scheduled
  • Improve workflow by clarifying the actual post status from SIA_Publishing_Entity_Handler_Abstract::workflowInfo()

Improvements

  • Show ventures in modals on licensee blogs by setting the ‘showInModal’ key in SIA_Publishing_Handler_Venture::context()
  • Standardize the randomized output of SIA_Publishing_Handler_Ventures::populate() by specifiying a randomizeOutput object property and annotating the ‘randomize’ context paramenter
  • Eliminate blog switching and countries redundant lines from SIA_Publishing_Handler_Ventures::populate_ventures()
  • Show a warning when tiered partners are shown and some are missing because their tier was not set in SIA_Publishing_Handler_Partners::context() (was waiting for the Component Library)
  • Show a notice when a component’s path leads nowhere from SIA_Publishing_Public::preprocess_block_context()

Fixes

  • Fix showing unpublished Privacy Policy and Imprint links in the footer by checking for permissions in SIA_Publishing_Context::sitePrivacyLink() and adapting post statuses to the permission in SIA_Publishing_Layout::getPostIds()

15.12.0

Bring the Partnership Tiers to the Partners collection

Add a “Display partnership tiers” field to the Partners block and re-use the already in place condition in the Partners collection component to replicate the display in the footer introduced in v15.0.0.

New

  • Add a new ‘Display partnership tiers’ (field_64d2189ccf0e8) boolean field to the Partners block (group_60f18ca558943);
  • Make sure that the field’s value only works in conjunction with the Implementation ‘Use partnership levels’ being set Implementation by adding a guard clause to SIA_Publishing_Handler_Partners::context()

Fixes

  • Fix missing block editor when the theme is Wanda and Version Switch is active by updating the use_block_editor_for_post hook condition and priority in SIA_Publishing::define_admin_hooks()

15.11.0

Allow publishing post types on microsites

Include microsites in the publishing category, and trigger showing post types with the ‘publishing’ location: Organiation, Profile, Press mention, Testiomnial

New

  • New case for the heading of footer local partners for microsites in SIA_Publishing_Context::localPartners(), with its own generic “Partners” heading and using the same financial partnership term as the international blog
  • Include microsites in publishing blogs by adding SIA_Ariel::is_microsite() to the SIA_Publishing::is_publishing_blog() helper, which in turn fulfills the condition for post types

15.10.0

Improved rendering of Ventures component

The Alumni Ventures page on the international website is very heavy (clocking in at about 25MB uncompressed, even without finalists).

Make better use of the new loading pattern of competitions and stop loading Venture objects when Finalist Venture extensions are already provided by competitions.

New

  • Use the newly provided blogIds key in the output of spv_get_years() to prevent instantiating competitions in countries that didn’t run or don’t have project posts in SIA_Publishing_Handler_Ventures::populate_ventures()
  • Make sure competitions that have not finished are not included in the Ventures component in SIA_Publishing_Handler_Ventures::populate_ventures()
  • Directly use the competition’s finalist ventures (SIA_Competition::finalists) to render Ventures (as opposed to loading an additional SIA_Venture object) given that SIA_Finalist_Venture extends SIA_Venture and the holes have been plugged (below in fixes)
  • Use the newly provided SIA_Competition::load_instance() to make use of static variables and transients in SIA_Publishing_Handler_Ventures::populate_ventures()
  • Use the decorative media pattern in Venture by setting the thumbnail backgroundOnly to true when the image’s src contains the string ‘youtube’ in SIA_Publishing_Handler_Venture::populate()
  • Decrease the number of DB queries by not checking for term_exists in SIA_Publishing_Handler_Venture::sdgs()

Fixes

  • Prevent class confusion by checking for both SIA_Venture (new) and SIA_Post_Interface (old) when deciding which property or method to use while creating component contexts in SIA_Publishing_Entity_Handler_Abstract
  • Prevent double paragraph elements in Page leads by checking if the <p> string already begins the text in SIA_Publishing_Handler_PageLead::populate_lead() and stop adding it from SIA_Publishing_Context::__construct()

15.9.0

Hard-code the left aligned Page lead variant for Post and Vision statement

Only align left (the previous behavior) posts, given that they are content heavy, or page leads showing the Vision statement.

New

  • Add the left-aligned variant to the page lead in SIA_Publishing_Handler_Post::context()
  • Add the left-aligned variant SIA_Publishing_Handler_PageLead::populate_text() when the is_replaced_by_vision_statement parameter is set

15.8.0

Sync sitemap disk and transient cache busting

And add a block inventory to a sitemap that points custom blocks’ slugs to the IDs of the posts that contain them, and store the inventory in the sitemap’s cache

New

  • Call w3tc_flush_all() when busting a sitemap’s cache in SIA_Publishing_Sitemap::__bust_cache()
  • Add the SIA_Publishing_Sitemap::$blockInventory property that is filled during post association
  • Separate the __construct() transient into two keys: flat, that holds the SIA_Publishing_Sitemap::$flat property, and blockInventory
  • Add the addPostBlocksToInventory() method that fills up the $blockInventory array keyed with block slugs poingting to an array of $post->ID
  • While associating posts to the flat in SIA_Publishing_Sitemap::associate_posts() call the new addPostBlocksToInventory() method for each post
  • Add the unused SIA_Publishing_Sitemap::getPostsWithBlocks() method that looks through the $blocksInventory to find corresponding posts IDs

15.7.1

Fix missing breadcrumbs and missing testimonial authors

Fixes

  • Fix missing breadcrumbs of Tier 1 pages that aren’t section indexes (i.e. not a numeric index pointing to an array) in SIA_Publishing_Sitemap::get_breadcrumbs()
  • Fix the WP CLI bust-transient-variants incorrect use of $args with the --network option
  • Fix mixed testimonial author profiles caused by static in SIA_Profiles_Public::get_blog_profiles() by adding another $pointer key for the blog ID

15.7.0

New CLI command to bust a single transient’s variants

Need for example to only bust the licensees site transient instead of the entire list of site transients. It takes a class name and a method as parameters, plus the location (blog id, global, or network).

New

  • Add the bust-transient-variants CLI publishing subcommand resolved by SIA_Publishing_WP_CLI::bust_transient_variants

15.6.1

Fix missing Testimonial topics, stale Sitemap cache, and config warnings

Fixes

  • Add missing call to parent constructor for the testiomnial topic ACF field type in SIA_ACF_field_TestimonialTopic::__construct()
  • Bust the sitemap when a page title changes from SIA_Publishing_Admin::post_updated() hooked to post_updated in SIA_Publishing::define_admin_hooks()
  • Missing parent fields of SIA_Publishing_Config objects were throwing warnings and notices

15.6.0

New Banner block and Icon field type

Officially provide the Banner block with an optional background image and 4 variants: half, cover, accented, and inverted overlay.

Add the Icon field type that allows selection of an official SIA icon.

New

  • Use ‘community’ as the default theme in the retreat and summit websites from SIA_Publishing_Context::bodyClass()
  • Start populating $image, $icon, and $variants in the Banner component handler (SIA_Publishing_Handler_Banner) in order to provide a massive full-page cover with a background and an overlay
  • Offer the Banner block for selection by adding its handler to SIA_Publishing_Blocks_Repository::get_blocks_by_section()
  • Add a new Icon field type in SIA_ACF_field_Icon that lists all icons found in icons.config.json via SIA_Publishing_Theme_Repository::get_available_icons()

Improvements

  • Allow for icon context size modifier by adding it as a $size parameter with the ‘double’ default value in SIA_Publishing_Twig::get_icon_context()

Fixes

  • Fix search count showing something like 1-4 of 15 in SIA_Publishing_Context::__construct()
  • Provide access to field type instances via acf()->fields->get_field_type( '...' ) by switching to the official method of registering custom ACF groups by calling acf_register_field_type() in SIA_Publishing_Public::acf_register_custom_fields()
  • Rewrite all constructor methods of the custom field types to not require for the $settings parameter in __construct() and instead use a new setEnv() method to set the file settings
  • Rewrite all custom fields types that were using initialize() instead of a construtor (KPI, Localized, TestimonialTopic)

15.5.0

Release the Retreat sitemap and more core blocks

New

  • Create a list of sensible blocks allowed on posts or non-team blogs in SIA_Publishing_Admin::allowed_block_types()

Fixes

  • Fix ignored Tier 1 menu items when they are not arrays in SIA_Publishing_Sitemap::build_menu()

15.4.2

Branch the context logic when a post is password protected

When a singular post is password protected load the Focused screen template with the password form template.

New

  • Add the focused body class for singular password protected in SIA_Publishing_Context::bodyClass()

Fixes

  • Check for password protection (post_password_required()) when showing a single post (is_singular()) and when yes show a banner and add the password form to the context in SIA_Publishing_Context::__construct()

15.4.0

Store sitemaps and breadcrumbs in transients

And add the Retreat website to the layouts repository and check if articles and support role pages should be included in the sitemap.

New

  • Add SIA_Publishing_Public::get_totalPostsOfType() doing a $wpdb query only for post type and post status
  • Check more pages (stories, jury, mentors, press) for sitemap inclusion using the SIA_Publishing_Public::maybe_showPageInSitemap() hooked to sitemap/associate_posts and show_block/cta
  • Integrate the new Transient Service
  • Add the Retreat layouts to SIA_Publishing_Layouts_Repository::get_layouts()
  • Add more layouts to checks if they have enough content to be in the sitemap
  • Store the SIA_Publishing_Sitemap flat and pages’ breadcrumbs in local transients
  • Add the publishing bust-transients CLI transient buster command in SIA_Publishing_WP_CLI::bust_transients that clears all SIA transients depending on the parameters (blog id, global, or network) using SIA_Ariel_Transient_Service::listTransients()
  • Add SIA_Sitemap::__bust_cache()
  • Bust the Sitemap cache on any post status transition via SIA_Publishing_Admin::transition_post_status() hooked to transition_post_status

15.3.0

Improve sites network admin menu

Shorten names and standardize location of the icon.


15.2.0

Create a non-lating alphabet transliterator and use while switching to v20.21

When generating post slugs for non-latin alphabets during the switch to v20.21, transliterate the post titles to latin and generate ascii-only slugs where the default WordPress functionality fails: Cyrillic, Armenian, and Georgian.

New

  • Add the SIA_Publishing_i18n::transliterate() static that takes a string and passes it through the \ashtokalo\translit\Translit::convert() with the current language and the latin conversion
  • For Armenian, pass the output above further through the new SIA_Publishing_i18n::hyASCII() in order to also convert pairs that contain the ʿ latin character or diacritics
  • While running the SIA_Publishing_WP_CLI::switch_to_v2021() script pass post titles through SIA_Publishing_i18n::transliterate() before creating permalinks

Improvements

  • Display a notification dot next to menu titles from SIA_Publishing_Sitemap::formatMenuItem() depending on the post status

15.1.1

Fix passing the preview parameter to blocks

Fixes

  • Replace hard-coded TRUE with the $is_preview parameter when calling getContextOptions() in SIA_Publishing_Public::preprocess_block_context()
  • Pass the preview parameter $isEditorPreview to blocks in a new $data['is_preview'] key
  • Temporarily disable Testimonials previews in CZ (blog id 2)

15.1.0

Allow “featured” Profiles and fix Profile entity url

New

  • Include profile in the SIA_Publishing::POST_TYPES_WITH_IS_FEATURED constant

Fixes

  • Don’t add an incorrect utm_campaign parameter by default in SIA_Publishing_Component_Handler_Abstract::campaignVars()

15.0.0

Feature: create a Localizer ACF field and provide Partners in sections

Create a field type that can be attached to a different field, list all its options and provide the possibility to overwrite the default settings. It’s used for the Partnership tier field type, where the default top option is “Platinum”, and it can be localized as “Top partner”.

New

  • Add the Localizer ACF field (SIA_ACF_field_Localizer), which given another custom field, list all the latter’s options and provides text inputs for localizaing (i.e. relabeling) all of them
  • Include the partnershipTier (the key) and partnershipTierLabel (the localized value) in the Organiation entity handler in SIA_Publishing_Handler_Organization::context()
  • Introduce the use_partnership_tiers option in the Organizations component handler and send it from SIA_Publishing_Context::localPartners() when the use_partnership_tiers blog option is enabled
  • Overload the context() method in SIA_Publishing_Handler_Partners to be able to split partner organizations into levels (or tiers)

14.7.0

Protect critical posts and bring back the “Add new” page cap

New

  • Apply layout contextual body classes from SIA_Publishing_Admin::admin_body_class() hooked to ‘admin_body_class’ in define_admin_hooks() in order to create CSS rules to declutter the interface
  • Include critical posts when hiding page row actions from SIA_Publishing_Admin::page_row_actions()
  • Prevent critical posts from being deleted by re-mapping caps in SIA_Publishing_Public::protect_critical_posts() hooked to map_meta_cap in define_public_hooks()
  • Remove version reviewing distraction by hiding irrelevant pages with layout from super admin too while the sia-version-switch plugin is active in SIA_Publishing_Public::modify_pages_query()

Fixes

  • Fix missing create_pages cap assignment by mapping it to create_posts in SIA_Publishing_Public::manage_remaped_caps() hooked to ‘map_meta_cap’ with priority 10 (it’s overwritten by Version Switch)

14.6.0

Propagate UTM parameters for the CTA block

Make campaign vars processing available to all component handlers and add a method to append them to any URL.

New

  • Move the campaign vars processor to SIA_Publishing_Component_Handler_Abstract::campaignVars() and remove the duplicates from SIA_Publishing_Handler_CountrySwitcher and SIA_Publishing_Handler_CTAForwarder
  • Use the add campaign vars to the CTA block in SIA_Publishing_Handler_CTA::populate() and use it for the page_lead type in populate_target()
  • Add UTM parameters to any string URL with SIA_Publishing_Component_Handler_Abstract::applyCampaignVars() and use it for the above 3 components

Fixes

  • Don’t add the website URL from a Team entity with a restricted website in SIA_Publishing_Handler_Team::populate()
  • Hide teams without a website URL from the CTA forwarder in SIA_Publishing_Handler_CTAForwarder::populate()
  • Hide restricted websites from the country switcher in SIA_Publishing_Handler_CountrySwitcher::teams()
  • Don’t show the redundant current country the local organization block by removing the ‘highlight’ in SIA_Publishing_Handler_LocalOrganization::context()
  • Fix the regression bug that stopped showing the organization country in SIA_Publishing_Handler_Organization::context() because of an incorrect evaluation of the vertical
  • Fix missing licensor in licensees enumeration by removing the switch from SIA_Organization::get_licensees()

14.5.0

Allow enviroment dependent layout updates

If a user has the review permission and the layout debugging environment variable is on, allow all custom SIA blocks in a layout.

New

  • Add a new switch to SIA_Publishing_Admin::allowed_block_types() to check for the DEBUG_LAYOUTS .env constant and if the current user has the SIA_Publishing::REVIEW_PERMISSION

14.4.0

Provide the Get in touch block to Host or Candidate websites

The values of the profile and url are automatically prefilled with Coordinator for Hosts, Organizational lead for Candidates, and the url is the country email.

New

  • Process editor blocks default or disabled values by hooking SIA_Publishing_Admin::preprocess_block_field_values() to acf/pre_render_fields
  • Add a method to set block defaults: SIA_Publishing_Component_Handler_Interface::setFormDefaults( $fields ) called from the above method and its SIA_Publishing_Component_Handler_Abstract::setFormDefaults() counterpart
  • Prefill Get in touch block country email mailto: url and coordinator or organizational lead from SIA_Publishing_Handler_GetInTouch::setFormDefaults() and auto-generate the profile in populate()

Improvements

  • For clarity, now we use prefill_cloned_field_value() to replace SIA_Publishing_Admin::prefill_field_value()

14.3.1

Fix the v20.21 migration script false negatives

Fix missed identification of layouts by permalink and exclude irrelevant layouts (candidate layouts on a host license team website).

Once the title of a page is localized, the permalink will change and render the all checks in the migration CLI command will fail.

New

  • Add the SIA_Publishing_Layout::$slugStem (slug without the placement) and $slugSuffix (only the placement) properties;

Fixes

  • Instantiate the website and its sitemap in SIA_Publishing_WP_CLI::switch_to_v2021() and check if a post’s layout is included in the current sitemap before moving further with other checks
  • Replace $layout->permalink with $layout->slug when figuring out if the “special” posts pass tests (e.g. imprint, privacy, home, or stories)

14.3.0

Hide calls to action or sitemap pointers to ‘dead’ posts

Start filtering when adding posts to the sitemap or pointing to them in calls to action to make sure they don’t lead to useless pages (e.g. a page supposed to show Ventures when there are none to be shown).

Refactor the error context display to introduce a ‘notice’ level that doesn’t take over the full block, but instead shows a warning inside the block, used in Callout and CTA when pointing to either a not published page (after we’re done migrating) or post.

New

  • Introduce the ‘notice’ level of an error as a parameter in SIA_Publishing_Component_Handler_Abstract::handleError() for situations when we wanna show the block (e.g. a CTA) to editors, but still hide it because it shows irrelevant information (e.g. a link to a page that’s not published)
  • Move all context processing for errors from SIA_Publishing_Component_Handler_Abstract::context() to SIA_Publishing_Public::preprocess_block_context() that takes a ‘message’ and a ‘level’ and either generates an Info box or Notice context
  • Bubble the SIA_Publishing_Handler_PageSection->$callout error when it exists to the PageSecion context to be handled in preprocess_block_context()
  • When getting an error of level ‘notice’ in SIA_Publishing_Public::preprocess_block_context() don’t fully replace the block, but instead add a ‘Notice’ unit context to be handled in the block (e.g. in CTA or Callout)
  • Introduce a new sitemap/associate_posts filter in SIA_Publishing_Sitemap before associating a post to a layout
  • Introduce a new show_block/cta filter in SIA_Publishing_Handler_CTA::populate_target() and SIA_Publishing_Handler_Callout::populate_target() and when the result is not TRUE handle a ‘notice’ level error

Fixes

  • Add the categories context to an entity’s meta from SIA_Publishing_Entity_Handler_Abstract::categories() called by meta()
  • Include categories in the Post meta from SIA_Publishing_Handler_Post::context()
  • Don’t point to an Organization’s SIA Website while it’s restricted by checking the new SIA_Team::$websiteIsRestricted property before generating the Country one-liner highlight context in SIA_Publishing_Handler_Organization::context()
  • Rewrite some error messages and make them more human readable and with more context

14.2.0

Add a distinct cap for creating pages

In order to allow it granularily, distinguish edit pages and create pages by adding a new permission

New

  • Remap a page post type create_posts permission from edit_pages to create_pages from SIA_Publishing_Public::remap_create_pages_cap() hooked to init

14.1.0

Track Privacy Policy link traffic with custom campaigns

  • Automatically add GA custom campaign parameters to the Privacy Policy link context from SIA_Publishing_Context::sitePrivacyLink()

14.0.0

Finalize the CTA block conditions and API data sources

Prefill A&AP timeline fields with API data source and selectively show the CTA block or its lead generator based on the ‘application is open’ condition.

New

  • Prefill API data source fields’ values with A&AP timeline data from SIA_ACF_field_setting_dataSource::format_value() hooked to acf/load_value/type={$fieldTypeSlug} from SIA_ACF_field_setting_dataSource::register_field_setting()
  • Check the ‘application_is_open’ block condition using the new SIA_AAP::get_local() method that looks for the meta value and loads an AAP instance from SIA_ACF_field_BlockCondition::process_application_is_open() via process_block_condition() hooked to the block_condition filter in SIA_ACF_field_BlockCondition::__construct()
  • Add a block condition checker that takes the block data parameters and calls a new block_condition from SIA_Publishing_Component_Handler_Abstract::populate_blockConditionFulfilled() and use it in the CTA block

Improvements

  • Replace almost all website state checks with the new SIA_Website::validate_website()

13.2.0

Enforce the display of the Welcome Panel and fixes

Fixes

  • Fix the return of SIA_Publishing_Context::siteImprintLink() by adding a paramenter to SIA_Publishing_Layout::__construct() to attempt to find a layout only from its stem and figure out the suffix on the fly (e.g. imprint on HQ, the $slug becomes imprint-international when the $findFromStem parameter is TRUE)
  • Add a helper that returns all types of suffixes a layout can have, depending on the placement type and placement in SIA_Publishing_Layout::getPlacementSuffixes()
  • Add a new method to alter user meta values and use it to return TRUE for show_welcome_panel from SIA_Publishing_Admin::alter_user_metadata() hooked to ‘get_user_metadata’
  • Lower access to the Implementation options to edit_posts to include Editor users from SIA_Publishing_Admin::acf_register_option_pages()

13.1.0

Provide a lead generator and an AAP CTA target type

Add 3 more fields to the CTA block for a lead generator Mailchimp form that only appears when the block condition is not fulfilled.

Provide activity logs when the Simple History “initiator” is anonymous.

New

  • Refactor the CTA block to show a Lead Generator form that is a Mailchimp subscription form when the block_condition is not fulfilled
  • When deploying v20.21, activate the SIA Version Switch plugin first in SIA_Publishing_WP_CLI::deploy_v2021()
  • Clean up SIA_Publishing_Layouts_Repository from a CTA coming after a CTA with opposing block_condition_value

Improvements

  • Resolve Simple History queries for anonymous users (e.g. for WP CLI or log ins) by using add_action( 'simple_history/loggers_user_can_read/can_read_single_logger', '__return_true', 10, 3 ); in SIA_Publishing_Public::send_website_network_activity()
  • Start using the SIA_Ariel_Remote_Abstract::post_event() helper
  • More switches in the deploy_v2021 WP CLI command and activity events

Fixes

  • Include WP CLI as authorized in SIA_Publishing_Sitemap::associate_posts() to prevent it from having an empty $flat

13.0.0

Post relevant website activity logs to the Network Activity Airtable base

Hook into the Simple History logging mechanism and selective post and process log entries. For the ACF “Implmentation” options page add the posting handler to the existing function handling the options save

New

  • Create the SIA_Publishing_Admin::send_website_network_activity() method that for specific loggers or message keys or post types (SIA_Publishing::$postTypesWithActivity), gets or processes (via the new process_simple_history_option_log_details and process_simple_history_post_log_details) enough content and calls the SIA_Ariel_Remote_Abstract::run( 'post_website_network_activity_to_airtable_webhook' ) after Simple History finishes logging and calls the ‘simple_history/log/inserted’ hooked in SIA_Publishing::define_public_hooks()
  • Store post types that SIA Publishing tracks (sometimes depending on blog type) in SIA_Publishing::$postTypesWithActivity static property in SIA_Publishing_Public::process_post_types_with_activity() hooked to ‘init’
  • Add a new method to fetch the Stencil original post via SIA_Publishing_Layout::get_stencil_original() that looks for a post with its own slug in Stencil
  • After saving implementation options in SIA_Publishing_Admin::save_implementation_options() hooked to ‘acf/save_post’ post an update to Network Activity via SIA_Ariel_Remote_Abstract::run( 'post_website_network_activity_to_airtable_webhook' )
  • Finalize the Welcome Panel content in partials/welcome-panel-local.php
  • Enable the SIA_Publishing_Admin::display_dashboard_welcome_panel() method hooked to welcome_panel in SIA_Publishing::define_admin_hooks()
  • Temporarily remove all CTA blocks pointing to ‘Branding Guidelines’ from SIA_Publishing_Layouts_Repository::get_layouts()

12.0.0

Refactor the generation of team website content

Move all config blocks on team blogs into the Implementation settings page and lock the blocks in the block editor. Prefill Implementation settings with global values and show which field still has to be localized.

In order to not overwrite options, prefix all clone fields. Use “isLocalConfig” for option that are exclusive to the blog, not those who are overwritten.

New

  • Overhaul SIA_Publishing_Config with too many changes to document.
  • Create a reference of website and stencil parent group IDs, including clone mapping, and store them in SIA_Publishing::$configGroupsMap viat the new in SIA_Publishing_Public::process_config_groups()
  • Always get the block’s default value in SIA_Publishing_Block::getContextOptions() since config blocks are filled with either Implementation or Stencil settings
  • Drop the evaluation of wasOverwritten() since config blocks get their content from settings now in SIA_Publishing_Block::getContextOptions()

Improvements

  • Improve the content of the welcome panel in welcome-panel-local.php
  • Introduce the SIA_Publishing_Block::localOptionId property that contains a prefixed option id and get it via the new SIA_Publishing_Block::getLocalOptionId()
  • Refactor the evaluation of a block being local in SIA_Publishing_Block::isConfig() by using the new SIA_Publishing::$configGroupsMap['clones'] array
  • Refactor the logo context provider to allow an empty $imageData['title'] in SIA_Publishing_Twig::get_logo_context()

Fixes

  • Make sure the default value is provided in SIA_Publishing_Block::getDefaultValue() for either a local config, or an empty local config
  • Get post ID, not revision ID, in SIA_Publishing_Block::prepareFieldForEditing() and SIA_Publishing_Block::wasOverwritten() and SIA_Publishing_Block::getContextOptions()
  • To provide international awards on other websites get award images from Stencil in SIA_Publishing_Handler_Awards::populate() and format and pass the row to SIA_Publishing_Twig::get_logo_context()
  • Fix disabling image and WYSIWYG fields in SIA_ACF_field_setting_dataSource::disable_non_editable_field() by changing their types

11.6.0

New location condition for ACF groups

In order to not show migration field groups (e.g. “Redirection (v2021)”), add a new ACF group location labeled “Theme”

New

  • New ACF location (ACF_Location) extension: Theme (SIA_ACF_field_group_location_ActiveTheme) that offers all themes as options and matches the stylesheet with the active theme
  • Replace references to 2021 (the theme) with ‘Wanda’

11.5.0

Record per-block updates when updating a page

Refactor the block “overwritten” switch by going block by block when a post is updated and setting a post meta value for each block id, and then checking that value

New

  • When saving a post, compare new and old values by going block by block and comparing data and recording post meta in SIA_Publishing_Admin::record_block_updates() hooked to wp_after_insert_post
  • Send the $localBlockId parameter when creating a SIA_Publishing_Block instance to be able to use its own $localBlockId property, when available, to check for overwrites
  • Send the $postId parameter to SIA_Publishing_Block::getContextOptions() to check if it was overwritten in that specific post
  • In SIA_Publishing_Block::wasOverwritten() look for a post meta
  • Instantiate blocks with their ids from SIA_Publishing_Public::preprocess_block_context()
  • Optimize checking if a block exists before instantiating it by adding a block_exists() method to SIA_Publishing_Blocks_Repository
  • Narrow the effects of SIA_Publishing_Admin::prefill_cloned_field_value() to clone blocks and making sure we’re on a team blog, excluding International

Fixes

  • Fix prefillig blocks with getDefaultValue() when they haven’t been overwritten caused by checking when the page was updated, not the block itself
  • Prevent WYSIWYG fields showing as editable when the block is disabled by replacing its type with textarea in SIA_Publishing_Block::prepareFieldForEditing()

11.4.0

Add the Feedback widget to the page context

New

  • New feedback widget context added to the site footer context by SIA_Publishing_Context::feedbackWidget() called by SIA_Publishing_Context::siteFooter(), and showing the widget to logged in users

11.2.0

Country Switcher handler added to Site Footer and triggered in Site Header

New

  • Handler for country switcher (SIA_Publishing_Handler_CountrySwitcher)
  • Load countrySwitcher into page context from SIA_Publishing_Context::siteFooter() calling the new SIA_Publishing_Context::countrySwitcher()
  • Set the is_roadblock property depending on isLandingPage() in page context, siteFooter and siteHeader
  • Adjust the partnerships layouts’ titles and page leads in SIA_Publishing_Layouts_Repository::get_layouts()
  • Move filters into SIA_Publishing::define_public_hooks() from Parlament for filters that are not theme dependent
  • Give up on trying to load the minimal number of files for components and address the Notices by loading them all from SIA_Publishing_Block::instantiateHandler(), just like when building the context from SIA_Publishing_Context::__construct, which is not called while rendering Gutenberg blocks

Fixes

  • Don’t overwrite the first error a component handles in SIA_Publishing_Component_Handler_Abstract::handleError()
  • Annotate more properties of SIA_Publishing_Component_Handler_Abstract

11.2.0

New Local organization component handler and fixes

New

  • Handler for local organization (SIA_Publishing_Handler_LocalOrganization)
  • Handler for application-timeline and incubation-timeline registered in SIA_Publishing_Blocks_Repository::get_blocks_by_section() and fields set in SIA_Publishing_Handler_Timeline::populate()
  • Log * TODO connected to maintainer giving the wrong team for Austria in SIA_Publishing_Layouts_Repository::get_layouts_for_website()

Fixes

  • Fix showing all team members when there are no team members in Local team (SIA_Publishing_Handler_LocalTeam)
  • Better display of “unhandled” blocks in SIA_Publishing_Public::preprocess_block_context(), now showing an info box to users with high enough accesss
  • Check grammar for handleError error message
  • Stop showing “Implementation” in Stencil from SIA_Publishing_Admin::acf_register_option_pages()

11.1.0

Expand Event entity and new Language ACF type

New

  • Add a language selector ACF field type (SIA_ACF_field_Language) that uses the core get_available_languages() and get_locale() methods
  • Expand the Event class (SIA_Publishing_Event) and include the new Event Details ACF group fields, trying to interface The Events Calendar
  • Add the Event entity handler (SIA_Publishing_Handler_Event) , include in SIA_Publishing_Entity_Handler_Abstract::instantiateHandler() using the tribe_events post type
  • Add generic field context generator to SIA_Publishing_Twig::get_genericField_context()
  • Add the new field constants to constants.php calling SIA_Publishing_Event::set_event_focus_area_constants() and SIA_Publishing_Event::set_event_type_constants()

Fixes

  • Fix ACF blocks being editable in International context in SIA_Publishing_Block::isEditableInBlockEditor()
  • Fix Testimonial title generator failing because of blog switch in SIA_Publishing_Admin::generate_post_title()

11.0.0

Showcase team member profiles outside of Play

Create a custom route on team websites that displays public information of Play profiles as if they come from the currenty website and open them in modals from the Team page.

New

  • Add a custom rewrite rule (team/profile/([a-z0-9-]+)/?$), custom rewrite tag (profile_post_name), and query var (profile_post_name) in SIA_Publishing_Public;
  • When the query var is present, switch to Play before the query in SIA_Publishing_Public::maybe_switch_to_play_before_query() hooked to pre_get_posts and back so site after the query in SIA_Publishing_Public::switch_back() hooked to the_posts;
  • In the Profile entity handler populate (SIA_Publishing_Handler_Profile::populate()) switch to Play before instantiating the SIA_Profile entity.

Fixes

  • Move “Become a Host” (implement-sia-international) up in the sitemap to match alphabetical order in SIA_Publishing_Sitemap::inventory()
  • Fix missing job of profiles by using the SIA_Profile::occupation property instead of function in SIA_Publishing_Twig::get_indexCard_context()

10.8.0

Maintenance update, mainly Breadcrumbs and pager fixes

Fixes

  • Fix broken archives (is_archive()) and blog (is_home()) breadcrumbs that showed first post’s title by not loading a global $post when not is_singular() and adding to the flat a ‘faux’ post object that takes it’s data from the archive in SIA_Publishing_Sitemap::get_breadcrumbs()
  • Fix faulty pagination of archives by using native \Timper\PostQuery::pagingation() in Component_With_Entities_Trait::pager()
  • Fix type of social CTA in site footer

Improvements

  • Replace articles-international and articles-host layout’s titles with the correct ‘Stories’ in SIA_Publishing_Layouts_Repository::get_layouts()
  • Improve the display of archives titles in their page leads

10.7.0

New Board members block and fixed CTA forwarder options

For the special case of board members, which are sometimes team members, sometimes not, create a block that fetches profiles exclusively from Play and ignores the profile’s inactive status or if there is a user.

New

  • New Board members field (board-members) in SIA_Publishing_Blocks_Repository::get_blocks_by_section() added to the team-international layout in SIA_Publishing_Layouts_Repository::get_layouts() and handled by the new SIA_Publishing_Handler_BoardMembers handler that presets data source and number, and then extends SIA_Publishing_Handler_Profiles
  • New blogType parameter in SIA_Publishing_Blocks_Repository::get_blocks_by_section used by Board members (board-members) that is checked in SIA_Publishing_Admin::allowed_block_types() and has 4 options team, headquarter, headquarter-and-microsites, and play
  • Mirror the above options for the SIA_ACF_field_group_location_BlogType ACF location condition ‘Blog type’
  • Add the page layout as a body class with the p- prefix in SIA_Publishing_Context::bodyClass()

Fixes

  • Fix showing website layouts in CTA Forwarder by checking the field parent group (checks for group_62ee66add482a, the corresponding ACF group) in SIA_ACF_field_Layout::render_field() and providing a newly added $license_id parameter to SIA_ACF_field_Layout::get_options() that, instead of getting layouts for website, gets them by license id.

10.6.0

Adapt profile and organization links to current blog

When not on Play, organizations maybe use their website url and profiles have no URL


11.0.0

Finalize CLI switch to 2021

Set an option (switch_to_v2021_ran) when running and then ignore the --letsgo argument if the option is set. Identify a couple more issues with pages that should not be unpublished, even though they are not v20.21 (e.g. Blog).


10.4.0

Solid CLI switch to 2021 tester

Break down all paths for existing pages and account for running it after the switch. When there are issues (layout without corresponding post), don’t even attempt the switch

Improvements

  • The version switcher (SIA_Publishing_WP_CLI::switch_to_v2021()) breaks down all existing pages in a single table;
  • Check if a page is v20.21 by checking both for template (works before activating 2021) or has the template in SIA_Publishing_Admin::post_is_v2021()

10.2.0

Improve identifying v20.21 pages in the admin table

When version switch is not active and the default theme is 2021 (so after the switch), display a label showing which pages are v20.21 to prevent confusing them with older pages

New

  • Hook SIA_Publishing_Admin::display_post_states to the display_post_states filter and show the v20.21 label

10.2.0

Bug fixes

  • Fix not showing the block editor when Version Switch is off
  • Fix showing block errors to anonymous
  • Fix CTA showing without a custom link
  • Fix CTA showing when the target layout is of an unpublished post
  • Fix showing headers of LocalTeam when there are no
  • Fix missing ACF options pages when Version Switch is off

10.1.0

Finalize the Venture entity handler

Include related, generate a page lead when there’s a video. Also fix Ventures component handler


10.0.0

Display Testimonial authors from other blogs

And: adapt to ACF validation of title element

New

  • Testimonial (SIA_Publishing_Testimonial) has a new $authorProfileSourceBlog property based on the $authorField['key']}__blog_id post meta
  • Testimonial column values use static values to show profile data from a different blog based on the author profile source
  • SIA_Publishing_Post_Types_Repository now allows ‘title’ for testimonial
  • acf.js fixes the new ACF validation that requires the title element to not be empty by updating it as testimonial author and topic fields are changed

9.34.0

Add and finish the Impact Report landing page layout

New

  • Global Impact Report Landing Page (global-impact-report-landing-page-international) in layouts repo

Fixes

  • Bring back the Home site navigation link
  • Hide search from site header on landing pages

9.32.0

Focused templates for thank you layouts

Improvements

  • Use the focused screen template by checking the new SIA_Publishing_Context::isConfirmationPage() that looks for ‘thank’ or ‘thanks’ in the layout slug

9.31.0

Allow Headings in every layout

Improvements

  • Allow Heading (core/heading) for every layout from SIA_Publishing_Admin::allowed_block_types()
  • Replace Hosting VP handler with Features in SIA_Publishing_Blocks_Repository::get_blocks_by_section()

9.30.0

Breadcrumb improvements for 3rd and 4th tier

Improvements

  • Breadcrumbs for post types, not only pages, via SIA_Publishing_Sitemap::get_breadcrumbs() and post and job in SIA_Publishing_Sitemap::inventory()
  • Replace Alumni Community VPs handlers with Features in SIA_Publishing_Blocks_Repository::get_blocks_by_section()

Fixes

  • Fix breadcrumbs of 3rd and 4th tier pages (e.g. Job) that in SIA_Publishing_Sitemap::get_breadcrumbs()

New

9.29.0

New handlers for Team entity, Events and CTA Forwarder components

New

  • Point to host websites’ specific layouts on international landing pages via the new CTA Forwarder component (SIA_Publishing_Handler_CTAForwarder)
  • Specify the international campaign in the CTA Forwarder using the new International Campaign ACF field (SIA_ACF_field_InternationalCampaign) loaded via SIA_Publishing_Public::acf_register_custom_fields()
  • Team entity handler (SIA_Publishing_Handler_Team) displaying a teams post
  • Events component handler (SIA_Publishing_Handler_Events) displaying event posts (WIP)
  • Add the block slug ($blockSlug) as a component to the Timeline component handler in order to style them differently

Fixes

  • Check if any element in Timeline (SIA_Publishing_Handler_Timeline) has an image, and when not specify the text-only variant
  • Ensure that there is a content to display in the entity handler abstract (SIA_Publishing_Entity_Handler_Abstract) and prevent empty <p></p> exceprts

9.28.0

PageLead for landing pages, including dynamic Vision Statement replacement

  • Adjust template to landing page layouts by first setting a new layoutSlug key for SIA_Publishing_Context::context via the new SIA_Publishing_Context::layoutSlug(), then not setting the main navigation by checking in SIA_Publishing_Context::siteNavigation() the new SIA_Publishing_Context::isLandingPage() method which looks for the string ‘landing-page’ in the layout slug
  • When a new bool option is set (‘is_replaced_by_vision_statement’), replace the Page lead (PageLead) heading in populate_text() with the Vision Statement by reusing the latter’s new heading() method
  • When a new bool option is set (‘has_hidden_breadcrumbs’), don’t load breadcrumbs in Page lead (PageLead) context in populate()
  • When a new array option is set (‘variant’), add modifiers to Page lead (PageLead) heading in populate();

9.27.0

New Awards handler using Features

New

  • New component handler for Awards used by Awards & Recognition (awards-and-recognition) using the listing layout of the features group

9.26.0

New Info Box handler

New

  • New component handler for InfoBox with 3 variants + the default

9.25.0

New Brand Assets handler for photography and KPI partners block

New

  • New component handler for BrandAssets loading the configuration from the Design System and showing photography for the brand-assets-photos block
  • New KPIs Partners block in SIA_Publishing_Blocks_Repository::get_blocks_by_section() placed in all Partners sections in SIA_Publishing_Layouts_Repository::get_layouts()

Improvements

  • Be more explicit in naming KPIs to diferentiate between “all time” and “last edition” in SIA_ACF_field_KPI::get_options()

9.24.0

New Features handler used by Clusters and Responsibilities

New

  • New component handlers for Features set for national-responsibilities and service-clusters in SIA_Publishing_Blocks_Repository::get_blocks_by_section()

9.23.0

New Page Section, Mission Statement and Vision Statement handlers

When a page section component is rendered, it’s one of three types: image (default), video, or KPIs. KPIs (as of right now) are the first KPI block on the page pointed at by the Page Section component.

New

  • New component handlers for PageSection, MissionStatement, and VisionStatement
  • Consume icons from the component library JSON via SIA_Publishing_Theme_Repository::get_available_icons()
  • Static SIA_Publishing_Block::instantiate() used primarily by PageSection::figures() and reused in SIA_Publishing_Public::preprocess_block_context()

9.22.0

New Search Results and Banner handlers

When building context, separate between search (listing results, showing a summary and a search form), 404 (composed of a focused screen banner), and all other contexts.

New

  • New Search results handler (SIA_Publishing_Handler_SearchResults) listing entities when the context is_search() using the ‘support’ theme;
  • New Banner handler (SIA_Publishing_Handler_Banner) showing the error message whe nthe context is_404() using the ‘awareness’ theme;
  • Expand the filtering of body class in SIA_Publishing_Context::bodyClass().

9.21.0

New Venture and Ventures handlers

The Ventures component fetches project posts from the entire network, sorted by year descending and name ascending, and is very inefficient and lacks filters.

Some entity fields that are used almost universally, like title, excerpt, thumbnailUrl, and permalink are now entity class properties set in populate().


9.19.0

Financial partnerships is back to being a layout

Improvements

  • Wipeout ‘Foundations’ and re-convert ‘Corporates’ into Financial partnerships in SIA_Publishing_Sitemap::inventory() and SIA_Publishing_Layouts_Repository::get_layouts().

9.19.0

Organization refactoring and more block handlers

Improvements

  • Improve and simplify extension of SIA_Publishing_Handler_Organizations by SIA_Publishing_Handler_Partners and SIA_Publishing_Handler_Licensees by using class properties;
  • When the SIA_Publishing_Handler_Organizations is not used for Licensee, handler error when partnership_type is missing;
  • More handlers for FormattedHtml partnership blocks in SIA_Publishing_Blocks_Repository::get_blocks_by_section().

9.18.0

New Licensee and Organization handlers

New

  • New Organizations handler (SIA_Publishing_Handler_Organizations);
  • New Organization entity handler (SIA_Publishing_Handler_Organization);
  • New Licensees component handler (SIA_Publishing_Handler_Licensees) used by the sia-hosts block, extending the Organizations handler and pre-filling the posts data key with licensed organizations pulled from Play.

Improvements

  • Extend SIA_Publishing_Handler_Organizations via SIA_Publishing_Handler_Partners.

Fixes

  • Fix missing inline background image paths by refactoring the SIA_Publishing_Twig::svg() and SIA_Publishing_Twig::asset() Twig filters.

9.17.0

Testimonial admin improvements and fixes

Fixes

  • Fix the Testimonial title generator (SIA_Publishing_Admin::generate_post_title()) reference to the post that needs updating;
  • Fix annotations of SIA_Publishing_Testimonial class properties (@var instead of @param).

Improvements

  • Load the Testimonial author’s SIA_Profile in constructor instead of its ID and replace references;
  • Display a Profile column in the Testimonials admin page via SIA_Publishing_Admin::display_custom_post_columns_testimonial() and SIA_Publishing_Admin::set_custom_post_columns_testimonial();
  • List a Testimonial’s topics via SIA_Publishing_Testimonial::enumerate_topics().

9.16.0

Handler for Program outline

New

  • Include the 'program-outline' block slug as a variant of Timeline;
  • Update 7 FormattedHtml blocks in SIA_Publishing_Blocks_Repository::get_blocks_by_section().

Improvements

  • Show errors for SIA_Publishing_Handler_FormattedHtml when there is no content.
  • Show errors for SIA_Publishing_Handler_KPIs when there is no data.

9.15.0

Handler for KPIs

When the KPIs component handler receives data from its block, get either the local or, when empty, the Stencil value of a KPI.

New

  • New “KPIs” component handler (SIA_Publishing_Handler_KPIs) used by “KPI …” blocks and using the Figures (figures.twig) component;
  • Add a new method to the KPI ACF field (SIA_ACF_field_KPI::get_figure()) that takes the field’s value (a select field’s option name) and returns the KPI value from either Implementation or Stencil;
  • Add a ‘KPIs’ specific switch to SIA_Publishing_Block::getContextOptions();
  • Set default values for CTAs and the Callout of the impact-international layout in SIA_Publishing_Layouts_Repository::get_layout();

9.14.0

Complete Job templates

New

  • New “Job” entity handler (SIA_Publishing_Handler_Job) used by “Jobs”;
  • New “Jobs” component handler (SIA_Publishing_Handler_Jobx) used by “Jobs” blocks;
  • Add the ‘Jobs’ component handler to SIA_Publishing_Context::requireComponentHandlers().

Fixes

  • Remove ‘thumbnail’ support from job support from SIA_Publishing_Post_Types_Repository::get_post_types()`.

9.13.0

Improve Job admin UI

Improvements

  • Custom Job admin table columns via SIA_Publishing_Admin::set_custom_post_columns_job() and SIA_Publishing_Admin::display_custom_post_columns_job() hooked to manage_job_posts_columns and manage_job_posts_custom_column respectively.

9.12.0

New Local team handler and complete Profile templates

New

  • New “Local team” (SIA_Publishing_Handler_LocalTeam) component handler used by the “Local team” (local-team) block;
  • New $workflowInfo property in SIA_Publishing_Component_Handler_Abstract and matching populate method;
  • Include bio, about and socialLinks in Profile (SIA_Publishing_Handler_Profile) entity populate() and context();
  • Provide social link context from SIA_Publishing_Twig::get_socialLinks_context() that takes Organization or Profile $socialLinks and reuse for the SIA_Publishing_Context::siteFollow();
  • Make the Component_With_Entities_Trait::$dataSource property universal;
  • Update the community roles of profile block in team-international layout in SIA_Publishing_Layouts_Repository::get_layout()

9.11.0

Handlers for Profile, Profiles, Testimonial, Testimonials, and Get in touch

New

  • New “Get in touch” (get-in-touch) custom block in SIA_Publishing_Blocks_Repository::get_blocks_by_section();
  • New “Get in touch” component handler (SIA_Publishing_Handler_GetInTouch) used by the “Get in touch” blocks;
  • Replace all “profiles” block references with “get-in-touch” where the usage was “one single index card” in SIA_Publishing_Layouts_Repository::get_layouts();
  • New “Profile” entity handler (SIA_Publishing_Handler_Profile) used by “Profiles” and “Get in touch” blocks;
  • New “Profiles” component handler (SIA_Publishing_Handler_Profiles) used by “Profiles” blocks;
  • New “Testimonial” entity handler (SIA_Publishing_Handler_Testimonial) used by “Testimonials” blocks;
  • New “Testimonials” component handler (SIA_Publishing_Handler_Testimonials) used by “Testimonials” blocks;
  • Use the “FormattedHtml” handler for international-alumni-community-intro, local-alumni-community-intro, vp-international-alumni-community, vp-local-alumni-community in SIA_Publishing_Blocks_Repository::get_blocks_by_section();
  • Use the “Testimonials” handler for testimonials, “Partners” for partners, “Profiles” for profiles in SIA_Publishing_Blocks_Repository::get_blocks_by_section().

Fixes

  • Too many and too minor to mention.

9.10.0

Handler for Press Mentions

New

  • New “Press Mentions” component handler (SIA_Publishing_Handler_PressMentions) used by the “Press” blocks;
  • Replace a blocks default handler with an error as Info Box when the ‘error’ $context key is set from SIA_Publishing_Public::preprocess_block_context().

Improvements

  • Use SIA_Publishing_Entity_Handler_Abstract::thumbnail() to build the image context and remove populate_image() from both Post and Organizations;
  • Move the meta() context builder to SIA_Publishing_Entity_Handler_Abstract::meta() and call it by default from SIA_Publishing_Entity_Handler_Abstract::context().

9.9.0

Handler for Timeline and on-page errors for editors

New

  • New “Timeline” component handler (SIA_Publishing_Handler_Timeline) used by the “… history” blocks;
  • Add an ‘error’ key to $context by setting the new SIA_Publishing_Component_Handler_Abstract::$error property from SIA_Publishing_Component_Handler_Abstract::handlerErrors();
  • Replace a blocks default handler with an error as Info Box when the ‘error’ $context key is set from SIA_Publishing_Public::preprocess_block_context().

Improvements

  • Reverse the behavior of SIA_Publishing_Component_Handler_Abstract::handlerErrors() to not halt the script execution by default.

Fixes

  • Replace ‘url’ with ‘href’ in Breadcrumbs to fix links;
  • Add the clean_class Twig filter that uses sanitize_title as callback via SIA_Publishing_Twig::addFilters().

9.8.0

Handlers for Revolving Text and Impact Fields blocks

New

  • New “Revolving Text” component handler (SIA_Publishing_Handler_RevolvingText) used by the “Vision Statement” block;
  • New “Impact Fields” component handler (SIA_Publishing_Handler_ImpactFieldsBrief) used by the “Impact Fields” block.

Fixes

  • Add the clean_class Twig filter that uses sanitize_title as callback via SIA_Publishing_Twig::addFilters().

9.8.0

WP CLI script that sets excerpts based on a CSV

Run wp publishing set-excerpts --site=57 [--dry-run] to create excerpts for all posts with layouts from the repo.

New

  • New SIA_Publishing_WP_CLI::set_excerpts() handler that takes excerpts from the /includes/excerpts.scv file and updates the database directly for posts found with SIA_Publishing_Layout::getPostIdByLayoutSlug.

9.7.0

New Callout, Entities component handlers and overall more stable handlers

New

  • New component handlers for Callout and FormattedHtml;
  • Finalize the Entities component handler so that it can be used to create archives contexts, pagination, and a More link when the number of posts is -1;
  • Fork the Timber context in SIA_Publishing_Context based on is_singular and generate the entities context;
  • Display excerpt and featured image status in output of SIA_Publishing_WP_CLI::show_sitemap().

Improvements

  • Minor changes to either standardize the component handlers, fix notices, or better usage of Traits.

Fixes

  • Fix broken slug of “About our blog” block by changing it to the correct ACF field id: ‘articles-about’ in SIA_Publishing_Blocks_Repository::get_blocks_by_section() and the ACF field group.

9.6.0

Working Articles component in use in Post related articles

New

  • Add the relatedArticles context key to the Post entity handler from SIA_Publishing_Handler_Post::context();
  • Add the image context key to the Post entity handler from SIA_Publishing_Handler_Post::context() using the thumbnail() abstract;
  • Create a thumbnail context in SIA_Publishing_Entity_Handler_Abstract::thumbnail();

Fixes

  • Add the url parameter to the heading context when not in ‘full’ view_mode from SIA_Publishing_Entity_Handler_Abstract::heading().

9.5.0

Improve Press mention admin UX

Also first appearance of SIA_Publishing_Press_Mention


9.4.0

Improve Testimonial admin UX

Fixes

  • Fix auto-generated Testimonial title by using correct fields in SIA_Publishing_Admin::generate_post_title() hooked to acf/save_post;
  • Improve Testimonials admin table.

9.3.1

Fix missing component handlers boilerplate files

The block handler instantiate method was out of sync with the context class’s and the page lead didn’t have access to a trait in the block editor where the Twig context is not used.

Fixes

  • Create the static SIA_Publishing_Context::maybeRequireComponentBoilerplate() to load abstracts, interfaces, and traits and use it in SIA_Publishing_Block::instantiateHandler() and SIA_Publishing_Context::requireComponentHandlers().
  • Delete the blank __construct() from existing component handlers to allow the SIA_Publishing_Component_Handler_Abstract to run it’s guard clauses.

9.3.0

Maintenance update and dysfunctional new Articles component handler

New

  • Get Partners from a different blog via the new SIA_Publishing_Handler_Partners::$dataSource property that switches blog in SIA_Publishing_Handler_Partners::context() and use it in SIA_Publishing_Context::strategicPartners();
  • Populate the content context key depending on $view_mode from SIA_Publishing_Entity_Handler_Abstract::context() by calling the new content() method that loads either the content of the excerpt;
  • Populate the heading context key by default by adding it to SIA_Publishing_Entity_Handler_Abstract and calling it from context();
  • Assign more granular context keys in SIA_Publishing_Handler_Post for meta keys in order to allow separation in view modes that don’t populate the pageLead key;
  • New Articles group componnt handler in SIA_Publishing_Handler_Articles. It’s dysfunctional as all articles had the region’s heading;
  • Add a tax_query key to the $queryArgs array when fetching Component_With_Entities_Trait::posts.

Fixes

  • Fix using the same posts_per_page by checking if data['number'] is set in Component_With_Entities_Trait::populate_entities();

9.2.0

New Partners component with logo variant

Introduce a component handler trait for filling out the collection key of an entities derivative and prototype with partners in the site footer. In order to display partners, create the organizations post type hander with the entity type organization to match the SDS.

New

  • Component handler trait for building the context of an entities component with a collection of entities in Component_With_Entities_Trait that builds the query, including a meta_query for is_featured, creates the $posts query and executes the query via \Timber\Timber::get_posts();
  • Component handler trait for displaying the heading or lead in Component_With_Heading_And_Lead_Trait;
  • Component handler for the Partners block in SIA_Publishing_Handler_Organizations building its own partnership_type meta_query via SIA_Publishing_Handler_Partners::data_meta_query() that is then processed and possibly enhanced in Component_With_Entities_Trait::posts();
  • Entityhandler for the organizations post type in SIA_Publishing_Handler_Organizations;
  • Include the universally used entity handlers from SIA_Publishing_Context::requirePostHandlers().

Fixes

  • populateDisplay became populate_display in SIA_Publishing_Component_Handler_Interface;
  • viewMode became view_mode in SIA_Publishing_Entity_Handler_Abstract;
  • SIA_Publishing_Entity_Handler_Abstract::context() no longer assumes entity->post_type is the $entityType;
  • The instantiateHandler() that instantiates an entity handler moved out of SIA_Publishing_Context to a static SIA_Publishing_Entity_Handler_Abstract static in order to be called also from Component_With_Entities_Trait.

9.1.0

Complete Call to Action handler

Process the contact form, page, category and article when called from the ACF block callback.


9.0.0

Start filling up the Site Footer global context with signup, follow, and legal details

New

  • Provide context for the siteFooter context key, for now with signupOrFollow and copyright details;
  • Add a static SIA_Publishing_Context::sitePrivacyLink() to generate the link to the site’s or international privacy link;
  • Generate follow links that get social profiles from the website maintainer by getting SIA_Website::$maintainer stored in the global $sia_website variable in SIA_Publishing_Context::siteFollow();
  • Generate the ‘newsletter’ type CTA from SIA_Publishing_Context::siteNewsletter();
  • Move the boilerplate class require from individual block handler components to SIA_Publishing_Context::requireComponentHandlers() since they are now used by the global context;
  • Add the default ‘education’ theme to the global context’s body_class from the new SIA_Publishing_Context::bodyClass().

Improvements

  • Move the signupOrFollow context key out of base.twig since it’s now rendered by the site-footer region;
  • Move the Privacy policy link generation from CTA to the new sitePrivacyLink();
  • Add path() to the ComponentHandlerInterface for better intellisense.

8.3.0

New CTA component for sharing and signup added to Post handler

Additionally, create a new class to act as an interface for Jetpack and set default enabled modules (‘sharedaddy’) and services (Facebook, Twitter, Linkedin and Email). Hide the sharing links by default and load them in the entity’s context.

New

  • Create the CTA (SIA_Publishing_Handler_CTA) component handler to process context for either the Call to Action ACF blocks or direct instantiation;
  • Create the sharing “interface” SIA_Publishing_Sharing that filters main Jetpack calls for styling, enabling modules and services;
  • Require the new includes/class-sia-publishing-sharing.php from SIA_Publishing::load_dependencies();
  • Instantiate a SIA_Publishing_Sharing service when instantiating SIA_Publishing_Public in order to have it hook to its own filters and actions later via its own define_hooks() when called from SIA_Publishing::define_public_hooks();
  • Load the new SIA_Publishing_Entity_Handler_Abstract::$sharingCTA for entities that have a post type defined in the SIA_Publishing_Sharing::POST_TYPES_WITH_SHARING constant;
  • Populate the SIA_Publishing_Entity_Handler_Abstract::$sharingCTA from SIA_Publishing_Entity_Handler_Abstract::sharingCTA() by loading a ‘sharing’ type CTA component handler;
  • Populate the new SIA_Publishing_Handler_Post::$signupCTA from populate() with a ‘newsletter’ type CTA component handler and add it to context().

Fixes

  • Fix the SIA_ACF_field_ImpactFieldTheme::$name value to say ‘theme’ instead of ‘impact_hub_theme’.

8.2.0

Use the new application config constants pointing to the SDS


8.1.0

Complete the Page Lead component

Display all meta details in the Post entity handler by filling out the meta context and passing it on to the ‘pageLead’ component. Process and format index-card and date context arrays from the twig extender.

New

  • New context provider for the index card unit in SIA_Publishing_Twig::get_indexCard_context() that takes a Post, Profile, or array as arguments;
  • New context provider for the date unit in SIA_Publishing_Twig::get_date_context() that takes a timestamp as an argument;
  • New SIA_Publishing_Handler_Post::byline() context provider for post date and author;
  • New SIA_Publishing_Handler_Post::tags() context provider for post tags;
  • New SIA_Publishing_Handler_Post::$meta property set in SIA_Publishing_Handler_Post::populate() to add meta details (tags, date, byline) by calling the new SIA_Publishing_Handler_Post::tags() and SIA_Publishing_Handler_Post::byline() and adding the outcome to exiting $context['context']['pageLead'].

Improvements

  • Add the ‘portrait-square’ image size to SIA_Publishing_Public::add_image_size() (moved out of the SIA Play plugin).

Fixes

  • Remove the blank SIA_Publishing_Handler_PageLead::populate_meta() call, as the default component handler does not provide meta possibilities.

8.0.0

New handlers for custom blocks and all post types

Blocks

When a custom ACF block is rendered, pass along data to specific block handlers depending on type.

At runtime, the SIA_Publishing_Public::preprocess_block_context() is called for blocks registered via SIA_Publishing_Public::create_block_editor_block_types() hooked to acf/init. It then delegates the Twig context creation to specific, per block, component handlers. Handlers are implementations of the new SIA_Publishing_Component_Handler_Interface and extensions of the new SIA_Publishing_Component_Handler_Abstract. The handler’s id is added as a key to the block’s array in SIA_Publishing_Blocks_Repository::get_blocks_by_section().

Post types

When the Timber context is created, extend it with per-post handlers to build their specific context.

At runtime, the SIA_Publishing_Context is instantiated via SIA_Publishing_Public::context() hooked to timber/context. It then expands the context by instantiating a per post type SIA_Publishing_Entity_Handler_Interface implementation that extends the SIA_Publishing_Entity_Handler_Abstract to provide specific context keys.

New

  • Add the SIA_Publishing_Block::instantiateHandler() to find existing SIA_Publishing_Component_Handler_Interface implementations matching the new SIA_Publishing_Block::$handlerId variable loaded from the block repository;
  • Add the SIA_Publishing_Block::getContextOptions() method to instantiate block component handlers;
  • Refactor the SIA_Publishing_Public::preprocess_block_context() custom ACF block callback to start rendering twig templates by first calling thew new SIA_Publishing_Block::getContextOptions() to see if a context handler exists, and then calling the \Timber\Timber::render() to render the template;
  • Start creating component handlers in the sia-publishing/includes/block-handlers folder;
  • Design the component handlers in SIA_Publishing_Component_Handler_Interface to use populate() to create specific keys for the main context, and context() to provide the complete context to Timber and then twig templates;
  • Create the SIA_Publishing_Component_Handler_Abstract to ensure the correct instantiation and provide universal variables for all handlers;
  • Add the first block component handler for the page-lead component in SIA_Publishing_Handler_PageLead;
  • In SIA_Publishing_Context call the new SIA_Publishing_Context::instantiateHandler() that finds the post type specific implementation of SIA_Publishing_Entity_Handler_Interface;
  • Start creating post type handlers in the sia-publishing/includes/post-handlers folder;
  • Design the post type handlers in SIA_Publishing_Entity_Handler_Interface to use initialize() for loading the post variable, populate() to create specific keys for the main context, and context() to provide the complete context to Timber and then twig templates;
  • Create the SIA_Publishing_Entity_Handler_Abstract to fill the universal context keys and initialize all handlers;
  • Add the first post type handler for post in SIA_Publishing_Handler_Post with no specific keys;
  • Add the the page post type hander in SIA_Publishing_Handler_Page with no specific keys;
  • Add the pageLead context to all post type handlers except for page via the SIA_Publishing_Entity_Handler_Abstract::pageLead() method called by SIA_Publishing_Entity_Handler_Abstract::populate();
  • Start loading entity templates in index.twig via the get_entity_template() filter by using the context created by SIA_Publishing_Context;
  • Add the static block component handler class name generator SIA_Publishing_Twig::get_component_path() which basically replicates SIA_Publishing_Twig::get_template();
  • New breadcrumbs generator in SIA_Publishing_Sitemap::get_breadcrumbs(), right now only for posts, called from PageLead::populate();
  • Register the v2021 image sizes via SIA_Publishing_Public::add_image_size() hooked to after_setup_theme and name them via SIA_Publishing_Public::name_image_sizes() hooked to image_size_names_choose;
  • Register the v2021 images sizes to already start generating them from the Parlament functions.php.

Improvements

  • Load the twig extension HelloNico\Twig\DumpExtension() for debugging when WP_DEBUG is true by adding the new SIA_Publishing_Twig::addExtensions() method called from SIA_Publishing_Twig::__construct() intantiated from SIA_Publishing_Public::twig() hooked to timber/twig;
  • Replace ‘medium’ with ‘gallery-2x1’ as a preview of the custom Hero image in the Page Lead ACF group (group_61361d2c976d3);
  • Display a context dump() from base.twig.

Fixes

  • Fix: Register the @brand twig namespace from SIA_Publishing_Public::register_twig_template_paths().

7.6.0

New layouts and blocks for social media campaign landing pages

  • New layouts in repository for the 4 main campaigns’ landing pages: Application, Community Voting, Discovery, and generic (shown when there is no running campaign);
  • New blocks in the repository for global events, CTA forwarding, and Community Voting UI;
  • Topic fields for Events for targetting the campaign.

New

  • Add 4 new layouts for social media campaign landing pages: “SM Application Landing Page” (application-landing-page-international), “SM Community Voting Landing Page” (community-voting-landing-page-international), “SM Discovery Landing Page” (discovery-landing-page-international), and “SM Landing Page” (social-impact-award-landing-page-international) to SIA_Publishing_Layouts_Repository::get_layouts();
  • Add the 4 layouts above to SIA_Publishing_Sitemap::inventory() as Tier 3, with no parents;
  • Add the “Community Voting (Host)” layout with slug community-voting-landing-page-host to SIA_Publishing_Layouts_Repository::get_layouts() containing only two blocks: page-lead and community-voting;
  • Add the community-voting-landing-page-host to SIA_Publishing_Sitemap::inventory() as Tier 3 with “Program” as it’s parent;
  • Split “Financial partnerships” (financial-partnerships-international) into 2 layouts: “Corporate partners” (corporates-international) and “Philanthropic partnerships” (foundations-international);
  • Register new block locations in SIA_Publishing_Blocks_Repository::get_blocks_by_section() to include in the landing pages: “Global events agenda” (global-events-agenda), “Call to Action Forwarder” (cta-forwarder), and “Community Voting” (community-voting);
  • Event topic custom ACF field (SIA_ACF_field_EventTopic) getting Glossary topics via SIA_Glossary::get_event_topics();
  • Load the Event topic field via SIA_Publishing_Public::acf_register_custom_fields() hooked to acf/include_field_types;
  • Event post interface class in SIA_Publishing_Event used to get Event topic constants;
  • Set Event topic constants via SIA_Publishing_Event::set_event_topic_constants() called from constants.php;
  • Add new post id constants to SIA_Publishing_Testimonial::set_testimonial_topic_constants() to include Application, Community Voting.

Improvements

  • Change the README extension to display MarkDown formatting automatically;
  • Mention in the DocBlock comment of SIA_Publishing_WP_CLI::duplicateContactForms() that existing forms are skipped.

Fixes

  • Don’t assume all ACF block field groups contain fields in SIA_Publishing_Block::isConfig().

7.5.0

New yearly KPIs and KPIs Community Voting block

  • New: Add the kpis-community-voting block to the block repository in SIA_Publishing_Blocks_Repository::get_blocks_by_section();
  • New: Add the placeholder “KPIs Community Voting” (group_62ed5a1bbf589) ACF field group;
  • New: Include the “KPIs Community Voting” settings in the “SIA Stencil” (group_5fccea2a1c2b3) ACF field group.

7.4.0

Provide a [teasers] shortcode

  • New: Add the sia_publishing__shortcode__get_teasers() from lib/shortcodes/_teasers.php hooked to init via SIA_Publishing_Public::register_shortcodes() and process [teasers post_type='post' post__not_in='25' posts_per_page='3'].

7.3.0

New blocks for “Program timeline” (in “Program”) and “Local team” (in all “Team” layouts)

  • New: Create the 2 blocks in SIA_Publishing_Blocks_Repository::get_blocks_by_section();
  • Fix: Replace ‘events’ in “Program (Host)” with the new “Program timeline” in SIA_Publishing_Layouts_Repository::get_layouts();
  • Fix: Replace ‘profiles’ in “Team (Candidate)”, “Team (Host)”, and “Team (International)” in SIA_Publishing_Layouts_Repository::get_layouts().

7.2.0

Move the ‘list-websites’ WP CLI subcommand out of Publishing into

  • Fix: Remove the misplaced SIA_Publishing_WP_CLI::list_websites() subcommand to SIA_Deployment_WP_CLI::list_websites()
  • Fix: Add missing ‘(alumni)’ to SIA_Publishing_Contact_Form_Repository::get_contact_forms()

7.1.0

Remove Cookie Notice dashboard widget via SIA_Publishing_Admin::remove_dashboard_noise() hooked to ‘wp_dashboard_setup’

7.0.0

Provide context to Twig/Timber templates

  • New: Add custom filters and functions to Twig via SIA_Publishing_Twig hooked to the timber/twig filter in SIA_Publishing::defined_public_hooks();
  • New: Register site header context via SIA_Publishing_Context hooked to the timber/context filter in SIA_Publishing::defined_public_hooks();
  • New: Register SIA Design System template paths via SIA_Publishing_Public::register_twig_template_paths() hooked to timber/loader/loader in SIA_Publishing::defined_public_hooks()

6.1.0

Display a post-context navigation on Stencil

  • New: Instantiate a sitemap from a post on Stencil in order to display the correct navigation via SIA_Publishing_Sitemap::initialize_from_post() static called;
  • New: Add team and active parameters to the SIA_Publishing_WP_CLI::list_websites() WP CLI command;
  • New: Colorize SIA_Publishing_WP_CLI::list_websites() to better spot inactive websites.

6.0.0

Finish the deployment function for websites by cloning layouts them when not on Stencil or the layout is blog specific

  • New: Create SIA_Publishing_Sitemap instances that are specific to a website’s license or ID via the new static SIA_Publishing_Sitemap::initialize_from_website();
  • New: Create the SIA_Publishing_Sitemap::build_menu() method to build an array of a website’s 2 level navigation;
  • New: When building the SIA_Publishing_Sitemap::$flat property called from __construct(), include instantiated layouts via SIA_Publishing_Sitemap::associate_layouts() and, when they exist, posts via SIA_Publishing_Sitemap::associate_posts();
  • New: Account for post excerpts when applying a layout, and reset post title and post name for new posts or when overwritting a layout in SIA_Publishing_Layout::applyTo();
  • New: When not applying a layout in Stencil or to its specific website, clone the content from Stencil by calling the new SIA_Publishing_Layout::clonePostContent() from SIA_Publishing_Layout::applyTo();
  • New: Add the $excerpt property to SIA_Publishing_Layout and use it when cloning a post;
  • New: Check if a layout has a website specific placement via the SIA_Publishing_Layout::isBlogSpecific() method;
  • New: WP CLI function to list the 2 level (tiers 0 to 2) site or license specific navigation by using the SIA_Publishing_Sitemap::build_menu(), called SIA_Publishing_WP_CLI::show_navigation()
  • New: WP CLI function to display an admin table of all the websites in the multisite network, called SIA_Publishing_WP_CLI::list_websites()
  • New: WP CLI function to ensure that all sitemap nodes have equivalent layouts, called SIA_Publishing_WP_CLI::validate_sitemap();
  • New: WP CLI enhancement to show a site specific sitemap with post titles and statuses when they exist, or layout names from SIA_Publishing_WP_CLI::show_sitemap() and SIA_Publishing_WP_CLI::addSitemapBranch() that takes the sitemap as a paramenter;
  • New: Update CTAs for the ‘About the Award (Host)’ layout in SIA_Publishing_Layouts_Repository::get_layouts();
  • Fix: ‘Page lead’ block in ‘Partners (Host)’ layout doesn’t have parameters in the ‘data’ index in SIA_Publishing_Layouts_Repository::get_layouts();
  • Fix: WP CLI class-sia-publishing-wp-cli.php functions naming convention uses “_” for exposed commands, and camelCase for private functions;
  • Fix: Incorrect ‘type’ parameter for ‘callout’ block in ‘imprint-international’ layout

5.2.0

Duplicate all repository Contact Forms from Stencil before deploying v20.21

  • Create a SIA_Publishing_Contact_Form_Repository class that:
  1. returns all CTA contact forms from SIA_Publishing_Contact_Form_Repository::get_contact_forms()
  2. optionally switches to Stencil to get source forms via SIA_Publishing_Contact_Form_Repository::get_source_forms_from_stencil()
  • Add a WP CLI function that duplicates contact forms from Stencil if they don’t already exist, called SIA_Publishing_WP_CLI::duplicate_contact_forms()
  • Attempt to duplicate contact forms before creating all pages by calling SIA_Publishing_WP_CLI::duplicate_contact_forms() from the SIA_Publishing_WP_CLI::deploy_v2021() command function

5.1.0

Prevent most roles from deleting v20.21 pages

  • Remove the “Trash” and “Quick edit” page row actions for roles that don’t have the REVIEW_PERMISSION via SIA_Publishing_Admin::page_row_actions() hooked to bulk_actions-edit-page;
  • Remove all “Bulk actions” page row actions for roles that don’t have the REVIEW_PERMISSION via SIA_Publishing_Admin::page_bulk_actions() hooked to page_row_actions;

5.0.0

Register every v20.21 page’s template as Block template

  • e6d6cd43 New: Limit blocks that are allowed on pages with a SIA layout

  • 0b98b253 New: Create CLI commands to list and validate layouts

  • 0330cea3 New: Register every page’s template as Block template

  • 4409598b New: Add the fallback data source to Block

  • 9f3a8aa9 New: New block for Photo Brand Assets component

  • 849c5778 New: Add the VP Hosting setting and field group

  • a9dc2f07 New: Component blocks for branding assets (color, CI, type)

  • e1c1218f New: Add default for core/heading block

  • 189456ec New: Process core blocks added to layouts repository

  • 8f0ceff7 New: Replace key of Contact Form ACF field with form name (post slug)

  • a21e307d New: Add Testimonial and Job classes to declar Testimonial topic constants

  • 50e8aebd New: Add Local Organization and Info Box block to blocks repository

  • da87937f New: Add an “Info Box” block with heading and content

  • e90ae9e0 New: Add a description to CTA contact form field

  • 59b1d406 Fix: Incorrect ‘type’ parameter for form CTAs in the layout repository

  • a9ce8497 Fix: Layout block arrays are associative and overload first identically named blocks

  • 8c8892c7 Fix: Standardize naming of intro and teaser blocks in the repository, remove Values, rename alumni community blocks

  • 339512de Fix: Add Excerpt support for pages

  • 63003273 Fix: Don’t show the Implementation options page for International blog

  • fde56113 Fix: Rename Service Clusters to fit Strategy base

  • 7f2a3dba Fix: Add Heading, Lead, and Number fields to collection field groups

  • 2b2a547f Fix: Declare the $since prop for Block class

  • 0352d197 Fix: Articles block is missing the number of articles

  • 563193b6 Fix: Using is_null for meta gives leads to false negatives for existing page layouts

  • 41a4ae62 Fix: Blocks for Financial partners and Program outline missing from repository

5.0.0

Manage v20.21 staging of pages on Stencil and blogs with specific layouts via WP CLI scripts

  • New: Create WP CLI commands to: ‘set-layout’ to a post, ‘unset-layout’, ‘create-post-with-layout’, ‘deploy-v2021’, ‘stage-v2021’, and finally ‘wipeout-v2021’, all taking a site or --network as parameters;
  • New: Apply a layout to a post by building blocks and markup via SIA_Publishing_Layout::applyTo();
  • New: Get post IDs for a specific layout via SIA_Publishing_Layout::getPostIds();
  • New: Get repositoty layouts for a specific website (either for ID or license) via SIA_Publishing_Layouts_Repository::get_layouts_for_website() static method taking a SIA_Website argument;
  • New: Display the set layout next to page actions via SIA_Publishing_Admin::display_layout_in_admin_page() hooked to ‘post_row_actions’ and ‘page_row_actions’;
  • Fix: Layouts in the repository make inconsistent use of data parameters in SIA_Publishing_Layouts_Repository::get_layouts();
  • Fix: Adding a block’s markup programmatically fails because SIA_Publishing_Block::getGutenbergMarkup() has a missing comma in the generated JSON;
  • Fix: Deprecate the ACF “Publishing” field group and switch to get_post_meta() and update_post_meta() for a page’s layout;
  • Fix: Allow custom blocks to have preset data from the blocks repository by expanding SIA_Publishing_Block::getACFChildrenFields();
  • Fix: Limit the available layouts in the SIA_ACF_field_Layout options to those available to the current website by using the new SIA_Publishing_Layouts_Repository::get_layouts_for_current_website() usign the method above

4.9.0

Move and make reusable admin components

4.8.0

Improve UX of custom post types editor and fix admin menu “Articles” issues

  • Simplify WYSIWYG toolbar via SIA_Publishing_Admin::simplify_mce_buttons() hooked to mce_buttons filter;
  • Fix notices and menu item shown in admin menu when “Articles” are not available to current user in SIA_Publishing_Admin::rename_post_admin_menu_label() hooked to admin_menu
  • Replace usage of edit_posts permission in SIA_Publishing_Admin by replacing it with the SIA_Publishing::EDITOR_PERMISSION constant (read_private_posts)

4.7.1

  • Stop checking for ACF field groups to import while DOING_AJAX in SIA_Publishing_Admin::maybe_sync_acf()
  • Fix trying to import ‘SIA Implementation’ and ‘SIA Stencil’ in blogs that are neither Stencil nor team blogs from SIA_Publishing_Admin::maybe_sync_acf()

4.7.0

New SIA_ACF_field_group_location_BlogType field group location to filter field groups based on the website shown with 2 options: team website or Play (the only one with team management groups)

  • Register the new location type in SIA_Publishing_Public::register_field_group_location_types() hooed to acf/init
  • Allow hiding a field completely when there are no options presented to the user

4.6.0

Include “Broken Link Checker” plugin’s dashboard widget in SIA_Publishing_Admin::remove_dashboard_noise()

4.5.1. =

Update dashboard noise cleanup by hooking SIA_Publishing_Admin::remove_dashboard_noise() to wp_dashboard_setup to come after Rank Math and include WP Mail SMTP

4.5.0

Display layout placement in Pages admin page, and filtered out unfit pages

  • New labels in Pages admin page that show either license level (for “license_id” layout placement type) or blog name (for “blog_id”) by hooking SIA_Publishing_Admin::display_page_placement() to display_post_states;
  • New literal display of placement via the SIA_Publishing_layout::getPlacementLabel();
  • New filtered query applied to pages that have the _template_layout filled in Pages admin page that show either all pages in “Stencil” or team blogs for super admin, or only available pages in team blogs by hooking SIA_Publishing_Admin::modify_pages_query() to pre_get_posts;
  • New “Selection process” block for ACF via SIA_Publishing_Blocks_Repository::get_blocks_by_section();
  • New versioning of layouts via the ‘version’ layout value and inclusion of blocks via the ‘since’ block value in SIA_Publishing_Layouts_Repository::get_layouts();
  • New method of getting layouts by placement type (‘blog_id’ or ‘licese_id’) via the SIA_Publishing_Layouts_Repository::get_layouts_by_blog_id() and SIA_Publishing_Layouts_Repository::get_layouts_by_license_id methods respectively;
  • New SIA_Publishing::ACF_LAYOUT_FIELD_NAME constant and replaced all direct references to ‘_template_layout’;
  • Update SIA_Publishing::REVIEW_PERMISSION to manage_sites and grant it to Communications Coordinator role via the user_roles.json option of Deployment;
  • Moved admin CSS from Deployment into sia-version-switch-admin.css and new selectors for layout placement (license_id or blog_id).

4.4.0

Prefill editor blocks with config values and provide external data sources for config fields.

  • New SIA_Publishing_Block class to manage editor blocks that are clones of field groups of Stencil of Implementation option pages;
  • New SIA_Publishing_Layout_Repository class to hold all predefined layouts and their list of blocks;
  • New SIA_Publishing_Layout class to apply predefined layouts to pages when they are registered via the layout repository;
  • Prefill editor blocks with the default config values by hooking SIA_Publishing_Admin::prefill_cloned_field_value() to acf/pre_render_fields;
  • Create a data source ACF field setting (SIA_ACF_field_setting_dataSource) for fields that are part of the SIA Stencil group.
  • Add a “Lock KPI” setting to the KPI field (SIA_ACF_field_KPI) and disable the field when it’s locked from the SIA Stencil group;
  • Create the Config class (SIA_Publishing_Config) to provide values to config fields;
  • Fix registering options pages from SIA_Publishing::define_admin_hooks() when Version Switch is not active on websites that are neither team websites nor Stencil (e.g. Summit);
  • Add the SIA_Publishing::ACF_OPTION_PAGE_SLUGS array constant to hold option page slugs;
  • Reorganize custom Publishing blocks by config theme instead of simply “SIA” from SIA_Publishing_Admin::block_categories();
  • Provide a very limited WYSIWYS controls bar by hooking SIA_Publishing_Admin::customize_acf_wysiwyg_field_toolbars() to acf/fields/wysiwyg/toolbars;
  • Disable block editing in the editor completely for blocks that are clones of either Stencil or Implementation field groups by checking whether a block is editable (SIA_Publishing_Block::isEditableInBlockEditor()) while executing SIA_Publishing_Admin::prefill_cloned_field_value() hooked to the acf/pre_render_fields filter;
  • Before prefilling a clone block’s value in SIA_Publishing_Admin::prefill_cloned_field_value(), check whether a block was already overwritten in SIA_Publishing_Block::wasOverwritten() by comparing the page create and modified times.

4.3.0

Serve “post” post_type with the “/article/“ permalink prefix via generate_rewrite_rules action and post_link filter

4.2.0

New SIA ACF fields for Layout and Block Condition

4.1.0

Add all SIA KPIs to the ACF KPI field

4.0.0

Add custom fields for SIA business domain

3.2.2

Change the slug, name, and field label of testimonial theme into Testimonial topic

3.2.1

Fix incompatibility with RankMath hiding the SEO checklist

3.2.0

Replace default logo URL on login page with home()

3.1.1

Exclude Glossary terms from Rank Math

3.1.0

Expand Job, generate Testimonial title, cleaner meta box UI

3.0.0

Introduce Jobs, Press mentions, and Testimonials, their ACF groups, and taxonomy

  • exclude them, and profile and teams, from Rank Math

2.4.0

Move ACF management to Stencil

2.1.0

Add a Quick Search to the dashboard (Relevanssi admin search hack)

2.0.0

Remove useless Dashboard widgets and enforce its layout

1.1.0

Fallback for the SIA options page and ACF group sync

1.0

Simplifies the editor interface.

  • remove discussion, hero, and page attributes panels from block editor;
  • remove page attributes from classic editor.