Profiles Changelog

Changelog

16.3.0

Reduce cached object size and fix missing organisation cache invalidation [*]

Improvements

  • Strip unused WP_Post fields (post_content, post_excerpt, guid, comment metadata, and others) from team, organisation, profile, and venture objects before they are serialized into transients
  • Move team and profile transient busting in SIA_Organization::__bust_cache() to after the licensee cascade loop, so the reads inside that loop get cache hits instead of triggering fresh DB queries

Fixes

  • Clear team and profile caches when any organisation is saved via the admin area; previously, only team and profile saves triggered cache invalidation — organisation saves left stale data in place
  • Extend SIA_Organization::__bust_cache() to bust team and profile transients unconditionally, not only when the organisation is a licensee
  • SIA_Organization::__bust_cache() now uses bust_transient_variants_in_all_blogs() for get_blog_profiles, so all blogs’ profile transient variants are cleared when an org changes, not only the currently active blog’s transient

16.2.3

Fix confusing display in enumerate_community_roles() when role value is empty

Fixes

  • Guard against an empty $value in enumerate_community_roles() — return early with '' for non-admin users when no community role is set, preventing a fatal error downstream

16.2.2

Hide community role field when no choices are available

Fixes

  • Override prepare_field() to return false and skip rendering entirely when get_choices() returns an empty array, suppressing both the field and its label
  • Skip business-rule validation in validate_value() when get_choices() is empty, preventing a required-field error for users who cannot see any role options

16.2.1

Fix fatal error when syncing user with a deleted profile post

  • Fix :: Guard against a null $profilePost when get_post( $profile_post_id ) returns null (stale ACF meta pointing to a deleted post) in SIA_Profiles_Admin::sync_user_with_profile()

16.2.0

Include the Team organizations in the response to Net/CRM

New

  • Create SIA_Team::$exportables with a single value: ‘hosts’

16.1.0

Remove service before sending to Website Reports

  • All in SIA_Profiles_Admin::update_pipeline_status()

16.0.0

Service access credentials Organization and Profile properties and Slack invite Profile property

Organizations and profiles now store their default access credentials for 3 services: SIA Play, Google Workspace, and Slack. By default they are turned off, but depending on the organization vertical and licensing pipeline status they are gradually turned on.

Besides the invite sent flag, now a Profile also stores the invite type, which is a collation of services it has access to.

New

  • Add an $accessCredentials property and associated get_defaultAccessCredentials() methods to SIA_Organization and SIA_Profile, storing default access for 3 services: ‘slack’, ‘google-workspace’, and ‘play’
  • Add a SIA_Profile::$inviteType property that collates the access found via the default access credentials and is used verbatim by the Ariel SIA_Team_Member entity
  • Track the ‘is_invited_to_slack’ (field_6929b112d195c) for ‘profile’ in the SIA_Profiles_Public::FIELD_IDS constant
  • Include ‘is_invited_to_slack’ in SIA_Profile::$importables to use as a flag for the corner cases where by default there’s access, but it’s been denied by the profile creator, used by SIA_Team_Member when formatting the email invite
  • Add a SIA_Profile::$organizationPipelineStatus property and associated get_organizationPipelineStatus() method used in the Profiles admin table

Improvements

  • Display the licensing pipeline status of a Profile’s organization in the admin table via SIA_Profiles_Admin::display_custom_post_columns()

Fixes

  • Include the ‘hosts’ field value as SIA_Team::$importables in order to keep in sync with the Net/CRM
  • Include Scaling lead organization by replacing is_licensee with a pipeline_status set check before switching to Play during the instantiation in SIA_Organization::__construct()

15.17.0

Track profile’s invite sent status via meta

If a profile was created before 17.10.2025, the invite is considered sent.

New

  • Add a property ($inviteSent) and a method (SIA_Profile::get_inviteSent()) to track if an invite for a profile was sent

15.16.0

On the margins improvements to team data

New

  • Add Rwanda (rw) to to ISO2 repository SIA_Profiles_ISO
  • Add Organization description as an $exportable to SIA_Organization
  • Include hosts in the tracked teams (legacy team reference) FIELD_IDS

Improvements

  • Delegate community role constant setting to SIA_Ariel from SIA_Profile::set_profile_role_constants to the earlier register

15.11.0

Post Profile updates to the Airtable Net/CRM

New

  • Load exportables in SIA_Profile:$exportables: names, phone, thumb, bio, occupation, organizations, teams, active, inactive, community role
  • Create $organizations as array in SIA_Profile to wrap the $organization as is
  • Create $active as bool in SIA_Profile to load the value of the active meta field
  • Use the NETCRM_Entity Trait in SIA_Profile

Improvements

  • Create $phoneNumber in SIA_Profile, also sent to Net/CRM

15.10.0

Allow bypassing of licensing status in organization query filter

In order to run CLI commands on all organizations, re-use the ‘bypass_organization_licensing_status_filter’ approach used for teams.

New

  • Check if the WP_Query has a ‘bypass_organization_licensing_status_filter’ set before altering the query in SIA_Profiles_Public::filter_organizations_status()

15.9.0

Start posting entity updates to the Airtable NET/CRM

As a prototype, start with posting organization fieldss that are present in the Net/CRM base (description, website URL, and name). Use the provided trait from SIA Ariel and provide an entity type and exportables.

New

  • Since it’s the prototype, expand $exportables of SIA_Organization to description, websiteURL, and thumbnailURL
  • Start using the NETCRM_Entity trait in SIA_Organization, SIA_Profile, SIA_Team
  • Add a new constant ENTITY_TYPE to SIA_Organization, SIA_Profile, SIA_Team that uses the singular and

Fixes

  • Temporarily remove the organization cache bust after syncing licensing status from SIA_Profiles_Admin::update_pipeline_status()

15.8.0

Improve Profile validations by refining dependent field filtering

New

  • Use SIA_Profiles_Admin::filter_profile_fields() to hide or make required profile fields depending on is_play()
  • Remove the auto-draft post status condition for showing the Email field

15.7.0

Add a unique, post id based, URL to Venture

Used by the Community Voting component to prevent permalink ‘blog/‘ mix-ups.

Improvements

  • SIA_Venture::$uniqueUrl using home_url()

15.6.0

Remove the Profile email outside of Play and allow Board members as Local team

Improvements

  • Change the field type into ‘hidden’ ouside of SIA_Ariel::is_play() in SIA_Profiles_Admin::filter_profile_fields()

Fixes

  • Show also team members with the Steering Board role in the $strict case of SIA_Team::get_teamMember_by_role() in order to board member profiles also together with their team

15.5.0

Adjust Profile view and assign board role permissions

To allow board members on International.

Improvements

  • Use granular guard clauses for board member roles in current_user_can_assign_role() and current_user_can_view_role_option() to allow COMMUNITY_ROLE_ADVISORY_BOARD_MEMBER in is_international_team_blog(), and both roles in
  • Managing board is removed from current_user_can_assign_role()

15.4.0

Allow Profile and Team creation via CRUD API

Add importables to Team, enricht importables in Profile

New

  • Add name to SIA_Team::$importables
  • Enrich SIA_Profile::$importables with names, email, active and professional details
  • Add South Africa (za) for new scaling lead and Zambia (zm) for older lead to SIA_Profiles_ISO::$mapping

Fixes

  • Add guard clauses for Profile organization admin colomn to SIA_Profiles_Admin::display_custom_post_columns()

15.3.0

Replicate exportables and airtable_uuid in Profile


15.2.0

Fix start year, replicate exportables in Team


15.1.0

Leaner CRUD Organizations with defined Airtable uuids for implementation partners

Starting 2025, we’re deprecating manual evaluation of start year.

New

  • Add new importables: website_url, start_year, end_year
  • Add the property and set in constructor SIA_Organization::$airtable_uuid
  • Start the deprecation of manual start_year via a new method SIA_Organization::start_year() when the value is set, use it. Otherwise return the Year of the publishing date.

15.0.0

Implement the CRUD trait in Play post type extensions

New

  • Add a class specific post type name constant POST_TYPE_MACHINE_NAME defined as the SIA_Profiles_Public equivalet
  • Use the Ariel CRUD entity trait via use CRUD_Entity in SIA_Organization, SIA_Profile, and SIA_Team to callback Ariel REST CRUD endpoints
  • Define $importables for the same classes for update operations from the same trait

Improvements

  • Improve post type separation in SIA_Profile::__construct() attempting a second check for a loaded post

14.1.0

Remove headshot and socials for candidate profiles

New

  • Hide the thumbnail and social profiles for candidate profile ($is_candidate) in SIA_Profile::__construct()

Fixes

  • Sort site profiles alphabetically in SIA_Profiles_Public::get_site_profiles() using the uasort on SIA_Profiles::sortProfilesByFirstName()

14.0.0

Get SIAYC and Steering Board profiles from the entire network

When looking for site profiles, use the blog profile methods to provide an output, optionally with a community role. As a bonus, prepare for distributed Youth Council and Steering Board profiles.

New

  • Add 2 new properties to a profile to identify if they are a candidate (SIA_Profile::$is_candidate) or a council member (SIA_Profile::$is_council_member) and adjust the display
  • Create a new method that iterates through blog profiles, optionally filtered by a community role, and returns an indexed array with 2 keyes: nodes (the profiles) and blog_id_index (the correspondence between profile post id and source blog) from SIA_Profiles_Public::get_site_profiles()
  • Include the site profiles output in the transient busting cycle in SIA_Profile::__bust_cache()
  • To sort profiles output by first name add a static array of Profile objects sorter in SIA_Profiles::sortProfilesByFirstName()
  • On team blogs validate that Alumni Steering Board members are also Youth Council Members in SIA_ACF_field_CommunityRole::validate_value()
  • Allow the Steering Board role to be seen and selected outside of Play from current_user_can_view_role_option() and current_user_can_assign_role()
  • Validate the Steering Board Member (COMMUNITY_ROLE_STEERING_BOARD_MEMBER) against a Youth Council Member (COMMUNITY_ROLE_YOUTH_COUNCIL_MEMBER) selection on team websites from SIA_ACF_field_CommunityRole::validate_value()

Improvements

  • Adapt the community role options depending on the block they are in (the ACF group) to only provide team member or board community role options depending on the placement in SIA_ACF_field_TeamMemberRole::get_choices() used by the LocalTeam and BoardMember blocks respectively
  • Speed up initialization of SIA_ACF_field_TeamMemberRole and SIA_ACF_field_CommunityRole by deferring the call to get_choices() to render_field()
  • Rename SIA_Profiles_Public::get_community_roles_profile_post_ids() into SIA_Profiles_Public::get_blog_community_roles_profile_post_ids() for clarity

13.11.0

Introduce the Advisory Board Member option for a Community Role

New

  • Add the new post id constant COMMUNITY_ROLE_STEERING_BOARD_MEMBER necessary for showing Profile collection in SIA_Profile::set_profile_role_constants()
  • Include the new post id constant in the board member helper in SIA_Profile::get_board_member_roles_post_IDs()
  • Add the new post id constant to the manage_board_members permission that’s currently mapped to manage_sites in SIA_Team_Member::can() in current_user_can_assign_role()

13.10.0

Introduce the Youth Council options for a Community Role

New

  • Add the 2 new post id constants COMMUNITY_ROLE_YOUTH_COUNCIL_MEMBER and COMMUNITY_ROLE_YOUTH_COUNCIL_CANDIDATE necessary for showing Profile collection used during the elections and after in SIA_Profile::set_profile_role_constants()
  • Add a helper to group the 2 roles in order to simplify validations in SIA_Profile::get_youth_council_roles_post_IDs()
  • Filter out the visibility of the new Youth Council roles on websites that don’t have alumni in current_user_can_view_role_option()
  • Filter out the assignment of the new roles in current_user_can_assign_role(), first by hiding them, second by checking for the manage_board_members permission that’s currently mapped to manage_sites in SIA_Team_Member::can()
  • Validate the role combination to ensure members are also candidates who are also alumni in SIA_ACF_field_CommunityRole::validate_value()

13.9.0

New video embed fields for a Profile video introduction

Using the newly added Deployment fields in the Profile Details group, store video embed details in Profile instances.

  • New :: Include 3 new video embed focused fields ($videoId, $videoUrl, and $videoEmbedUrl) to load video introductions for Profile in SIA_Profile::__construct()

13.8.0

Add Brazil to the ISO repository

  • Add br for Bulgaria to SIA_Profiles_ISO::$mapping
  • Add pt ISO language code mapped to br to SIA_Profiles_ISO::$ISO639LanguageCode

13.7.0

Provide the imported venture Grow node id from Venture objects

  • Add the SIA_Venture::$growVentureNid property to be sent to reports and load it from post meta via SIA_Venture::get_grow_venture_nid()

13.6.0

Add Bulgaria to the ISO repository

  • Add bg for Bulgaria to SIA_Profiles_ISO::$mapping
  • Add bg ISO language code mapped to bg to SIA_Profiles_ISO::$ISO639LanguageCode

13.5.1

Improve the social network domain processors


13.5.0

Add ISO 639 language code mapping to repository

A use case is sending localized data to the A&AP which uses the ISO639 standard where ‘rs’ is ‘sr’ and ‘me’ is ‘sh’.

  • Add the SIA_Profiles_ISO::$ISO639LanguageCode class constant mapping country ISO2 to language ISO639 according to the status quo (ch is empty, ug has none)
  • Add the static function SIA_Profiles_ISO::get_ISO639_language_code() that takes a country ISO2 as a parameter and returns the language mapping

13.4.0

Create an arbitrary debugging switch POC

Add a last FALSE parameter to any function to use in debugging functions that are called multiple times and use static and transients.

When the arbitrary switch parameter is truthy, use it to dump values.

  • Add the last $arbitrarySwitch boolean parameter to SIA_Profiles_Public::get_team_members() and dump values when it’s TRUE
  • Set the last parameter to TRUE in SIA_ACF_field_TeamMember::get_choices() when calling the above function inside the block to see returns.

13.3.0

Add Mexico to the ISO repository

  • Add mx for Mexico to SIA_Profiles_ISO::$mapping

13.2.2

Exclude international partnership on licensee blogs

  • Stop returning TRUE for PARTNERSHIP_TYPE_INTERNATIONAL_FUNDING on a team blog (excluding HQ) in current_user_can_assign_partnership_type()

13.2.1

Fix exclusive partnerships type on international and microsite

Given that microsites and HQ share international funding partnership type, the helper doesn’t show the type on international, because for the type it would stop by checking if it’s a microsite.

  • Fix the current_user_can_assign_partnership_type() bailing out when 2 blog types use the same partnership type by checking for both blog type and partnership type at once

13.2.0

New Partners grouping and selection for microsites

  • New SIA_Organization::get_international_microsite_partnership_types() to filter out partnership types on microsites like the summit or retreat
  • New case in current_user_can_assign_partnership_type() checking for the combo of SIA_Ariel::is_microsite() and the above group of Glossary terms

13.1.1

Fix inconsistent order of de-duped roles of alumni

  • Preserve the order of get_participant_glossary_post_IDs() by reversing the array_intersect parameters order in SIA_Profile::dedupe_participant_roles()

13.1.0

De-dupe overlapping roles of alumni

When a profile belongs to an alum, stop showing all roles, and only display the “highest” for visitors. For admin still enumerate all roles.

  • Add the missing participant glossary term post id for Participant (COMMUNITY_ROLE_PARTICIPANT)
  • Add SIA_Profile::get_participant_glossary_post_IDs() to list, in order, participant and alumni roles
  • Add SIA_Profile::dedupe_participant_roles() to filter duplicate participant roles using the new get_participant_glossary_post_IDs()
  • When not in admin (is_admin()) include the participant deduper in SIA_Profile::enumerate_community_roles()
  • Fix calling the transient buster (SIA_Profiles_Admin::bust_transients()) called only in Play by moving the hook save_post outside the is_playbook() switch in SIA_Profiles::define_admin_hooks()

13.0.0

Speed up searches for Teams or Profiles

Store queries using the Transient Service API by integrating the new Transient Service with Team, Organization, and Profile.

  • Add SIA_Profiles_Public::get_blog_profiles() to stores local profiles in a transient together with an index mapping them to community roles, ventures, and organizations
  • Start using a static function variable in SIA_Profiles_Public::get_team_members()
  • Add the static functions SIA_Profiles_Public::get_support_role_profile_post_ids() and SIA_Profiles_Public::get_community_roles_profile_post_ids() to return profiles using the above
  • Fix evaluating a Profile activity based only on the field and use the organization’s active status in SIA_Profile::is_inactive()
  • Use pointer methods in SIA_Profiles_Admin
  • Move from team member queries for Team and Organization to using transients
  • Switch to transients in SIA_Organization::get_licensees()
  • Deprecate get_members_query() for both Team and Organization
  • Replace the $teams variable with the teams() method in SIA Profile
  • Simplify SIA_Team::is_headquarter() by using SIA_Ariel::is_international_team_blog()
  • Replace the $AAP variable with the AAP() methdo in SIA Team
  • Add SIA_Team::__bust_cache() that propagates to Sitemap and empties team members, website team, website maintainer, and teams
  • Use static function variables in SIA_Team::get_teams() and store the output in a site (network) transient
  • Use the Transient Service API to speed up the static SIA_Team::get_team_by_blog_id() and SIA_Team::get_team_by_slug() methods
  • Add SIA_Organization::__bust_cache() method which propagates to Team, Profile, and Sitemap
  • Add SIA_Profile::__bust_cache() method which also empties team members and blog profiles transients
  • Include support roles (coach, expert, mentor) and jury member in the static SIA_Profile::set_profile_role_constants()
  • Add SIA_Profile::get_support_roles_glossary_post_IDs() to return the Glossary terms post IDs
  • Stop looking for choices in custom ACF fields’ initialize() methods for Internal Website, Organization Status, Team, Team Member, and Wordpress Properties
  • Stop automatically filtering team or profile status in SIA_Profiles_Public::filter_team_status() and SIA_Profiles_Public::filter_profile_status() outside the main query

12.1.0

Fix profiles admin display and improve partnership type groups evaluation

  • Unify assessment of partnership type groups by using in current_user_can_assign_partnership_type() the same groups returned from the SIA_Organization static methods (e.g. get_international_partnership_types())
  • Fix incorrect evaluation of SIA_Profile::is_board_member() by replacing array_diff() with array_intersect()
  • Allow for the “Featured” admin column (generated by SIA Publishing) in SIA_Profiles_Admin::manage_profile_posts_columns()

12.0.0

Add partnership tiers to organizations when a blog option is enabled

When the “Use partnership levels” is set in Implementation, show a 3 level, localizable, field when editing an organiations.

  • Create a new Partnership tier (partership_tier) that provides 3 levels and, when localized via a Localizer (localizer) field, displays the custom labels, followed by the original level in admin, and is a single value.
  • Add validation to Partnership type (partnership_type) to ensure that all partners are either financial or non-financial partners outside of Play (doesn’t use types)
  • Add methods and properties to Organization (SIA_Organization) to identify if it’s a partner ($is_partner) and what type of partner ($is_financialPartner matched against the new get_financial_partnership_types() or $is_nonFinancialPartner with get_non_financial_partnership_types())
  • Store the partnership tier ($partnershipTier) in organization objects when available as a string
  • Improve the display of the admin table of Organizations to show featured marker and tier

11.3.2

Prevent accidental removal of board member community roles

  • Fix hidden board member role choices from SIA_ACF_field_CommunityRole::get_choices() leading to removal of value by showing them to the current user if they hold them in current_user_can_view_role_option()
  • Hide team member roles from users that don’t hold them while they are editing their own profile in current_user_can_view_role_option()
  • Add the functions.php::current_user_is_editing_own_profile() helper to allow the above check
  • Fix missing board member roles from profile ennumeration by preventing repeated deleting of random keys of the SIA_Profile::community_role in SIA_Profile::dedupe_SIA_team_member_roles() and including a search for board member role post ids while on Play in enumerate_community_roles()

11.3.1

Fix organization status ACF field validation and settings

  • Fix organization status field invalidating posts that are not licensees in SIA_ACF_field_OrganizationStatus::validate_value()
  • Fix removed ‘multiple’ setting for organization field in SIA_ACF_field_OrganizationStatus::render_field_settings() and don’t try to validate a multiple value field
  • Revert the blog_id handling SIA_Team::get_websites()

11.3.0

Design a process for suspending an organization

Allow for licensee organizations to be put on hold by Host Support for the ongoing program year. When the organization is marked as “Suspended”, the transitioning process is also triggered automatically.

When an organziation is suspended it is also considered inactive, but it does show in the Country as “Suspended”. At the same time, the Country becomes itself “inactive”, is shown as “suspended”, and is not included in the programmatic IT services (e.g. Community Voting or Grow).

As long as a Host is suspended, it is still included in the Coutry’s organizations and shown in Play.

  • Add the bool SIA_Organization::is_suspended property with the value coming from the “Is suspended” field
  • Assess a FALSE is_suspended when returning the is_active property from SIA_Organization::is_active()
  • Display the team and organization “Suspended” status in admin tables from SIA_Profiles_Admin::display_custom_post_columns()
  • Automatically set the organization as “is_transitioning” when it’s being suspended or getting reactivated from SIA_Profiles_Admin::update_pipeline_status()
  • Post a distinct activity event for organizations that are getting suspended or reactivated when creating the event title and description in update_pipeline_status()
  • Add a new team status for suspended teams (those whose Host organization is suspended) defined as TEAMS_STATUS_SUSPENDED with value -1 from SIA_Team::set_team_status_constants() and label “Suspended” from SIA_Team::get_status_labels()
  • Include the suspended Host in the country organizations from SIA_Team::get_organizations() and SIA_Team::get_host_organizations()
  • Include the is_suspended field in the SIA_Profiles::FIELD_IDS['organization] constant which leads to its key being hooked to both acf/prepare_field and acf/validate_field in the Play hooks from SIA_Profiles::define_admin_hooks()
  • Include the is_suspended field when validating a licensee status in SIA_Profiles_Admin::validate_organization_license_management_field() to ensure its licensee is a host and the editor has the permissions to update the organization
  • Annotate and include in the constructor a team start year (SIA_Team::startYear) and end year (SIA_Team::endYear)
  • Provide a method to check if a country as active in a certain year from the new SIA_Team::was_active_in() with a year as a parameter

11.2.0

Provide a Team’s representative team member

When the organization is active, return the Coordinator for Hosts and the Organizational lead for Candidates.

  • Add a new method to Team that gets a “representative” team member in SIA_Team::get_representative_team_member()
  • Add the Fundraiser glossary term post id as COMMUNITY_ROLE_FUNDRAISER to constants in SIA_Profile::set_profile_role_constants() and allow it for the ‘manage_implementation_partners’ permission in current_user_can_assign_role()
  • Remove the call to SIA_ACF_field_TeamMember::get_choices() from initialize() and only call it on render

11.1.0

Display definitions of Glossary ACF fields

  • Add the $glossaryTerm['definition'] for choices of fields that are determined from Glossary fields: SIA_ACF_field_CommunityRole::get_choices(), SIA_ACF_field_PartnershipType::get_choices(), SIA_ACF_field_TeamMemberRole::get_choices()

11.0.0

Display a licensee’s transition and tighten editing

Ensure that licensees’ statuses only move upwards and that only relevant roles can update the licensing status. Once a licensee changes status, automatically set them to either on-boarding or off-boarding and later allow only their manager role to “uncheck” the transitioning status.

Validate every value against the current team member’s capabilities and logical progressions.

Improve marketing website organization admin table to show a partner’s roles.

  • Refactor the SIA_Organization->vertical to allow for both Implementation and Partnership
  • Validate most licensing status fields by first tracking them in SIA_Profiles_Public::FIELD_IDS['organization'] and then checking for incompatible combinations
  • Disable Organization licensing fields based on the current team member’s capabilities

10.4.0

Provide a Team property showing if its website is restricted

  • Add the SIA_Team::$websiteIsRestricted property checking if the ‘blog_public’ option is set to ‘2’, the value used by Restricted Site Access

10.3.0

Provide slugs for organization statuses

  • Add the SIA_Organization::get_organization_status_slugs() that returns an array of lowercase slugs for numeric licenses

10.2.0

Fix incorrect community role assignments or overwrites

  • Allow users to view all team member roles on Play profiles but virtually disable all of them
  • Create a new helper current_user_is_editing_profile() to find out if the current user is updating a profile either in the admin or in the front-end forms
  • Improve switches of current_user_can_assign_role() to limit by blog and permissions
  • Only disable community role options if the user is updating a profile post (using the above) and they cannot assign the role
  • Improve switches of current_user_can_view_role() to limit by blog and permissions

10.1.0

New ISOs in repository for Lebanon and Poland

  • Add lb and pl to SIA_Profiles_ISO::$mapping

10.0.1

Fix profile editing and account requests

  • Fix inconsistent validation of profile fields leading to hidden “SIA Venture” field (sia_venture) and “not recognized field type” when the global $post didn’t provide a field type in SIA_Profiles_Admin::filter_profile_fields(), and check for the ‘parent’ key in the $field array to match the new SIA_Profiles_Public::FIELD_GROUP_IDS['profile_details'] constant
  • Make sure that the organizations’ query filter (SIA_Profiles_Public::filter_organizations_status()) only targets admin in order to fix the Team’s hosts auto-suggest
  • Fix the empty “Organization” field in notifications from the GF request forms by having it as a hidden field in SIA_GF_field_Organization::get_field_input() when there’s only one possible choice
  • Fix display of Team websites by making sure only the blog_id (not the ACF array output) is stored in its corresponding property from SIA_Team::get_websites()

10.0.0

Store some team and profile query outputs in transients

  • Store the output of SIA_Team::get_teams() into a transient
  • Store the output of SIA_Profiles_Public::get_team_members() into a transient
  • Bust own post types’ transients in SIA_Profiles_Admin::bust_transients() hooked to save_post in SIA_Profiles::define_admin_hooks()
  • Delegate SIA_Profiles_Public::get_websites() to optimized SIA_Ariel::get_websites(), and SIA_Profiles_Public::get_blog_ids() to optimized SIA_Ariel::get_blog_ids()

9.1.0

Allow board members is Team member ACF type and fix Stencil options

Fixes

  • For the Team member role field type, when providing choices on the international blog, include board member roles (Managing and Advisory) in SIA_ACF_field_TeamMemberRole::get_choices
  • Fix Stencil tabs by not loading the acf.js on ACF options pages

9.0.0

Provide SIA ACF fields for Profile, Venture, and Team Member

And: adapt to ACF validation of title element

New

  • Custom SIA field for profile selection (SIA_ACF_field_Venture) extending acf_field_post_object but loading, via AJAX, profiles from across the network and has its own JS definition (sia_profile) using acf.models.SelectField.extend in acf.js
  • Custom SIA field for profile selection (SIA_ACF_field_Profile) extending acf_field_post_object but validating community role and venture correlation and has its own JS definition (sia_profile) using acf.models.SelectField.extend in acf.js
  • Custom SIA field for team member selection (SIA_ACF_field_TeamMember) extending acf_field_select but loading all team members from Play and using its own JS definition (team_member) using acf.Field.extend in acf.js
  • acf.js fixes the new ACF validation that requires the title element to not be empty by updating it as profile name fields are changed and registers the above fields

Fixes

  • Prevent board members being chosed outside of Play in current_user_can_assign_role()
  • Display the venture name for Profiles that have it set (but not organization) in SIA_Profile
  • To prevent overlaps (visible in new fields), use a different static variable name when the $grouped parameter is set in SIA_Profiles_Public::get_team_members()

8.8.0

Stop allowing board community roles on HQ

Fixes

  • Remove is_international_team_blog() exceptino for get_board_member_roles_post_IDs() from current_user_can_view_role_option()

8.7.0

Improve entities rendering between websites

More properties and methods that bypass the need to call functions based on post ID which would fail when rendering e.g. a Venture on a different website.


8.6.0

Provide licensed organizations via new Organization static method

New

  • New SIA_Organization::get_licensees() static method to fetch organizations from Play;
  • Ensure Play when getting countries via SIA_Organization::get_countries().

Fixes

  • Fix labeling the teams (a.k.a. Countries) featured image as ‘Country Flag’ in SIA_Profiles_Post_Types_Repository::get_post_types() given that it’s automatically found via the ISO2.

8.5.0

Filter inactive profiles on all websites

Improvements

  • Rely on the query parameters and not current_user_can( 'do anything' ) when filtering profiles via SIA_Profiles_Public::filter_profile_status() hooked to pre_get_posts (now used everywhere);

Fixes

  • Use the profile query filter outside of Play by moving it outside the SIA_Profiles_Public::is_playbook() switch in SIA_Profiles::define_public_hooks();
  • Fix risk of duplicate results from SIA_Team::get_teamMember_by_role() by using profile ids as output array keys (like get_members()).

8.4.0

Provide separate results for Volunteers and Team members (which Volunteers are)

New

  • Improve the SIA_Profile::dedupe_SIA_team_member_roles() to highlight “specific” roles, which are all but “Team member”;
  • Expand the SIA_Team::get_teamMember_by_role() to search for multiple roles and improve display of team member roles when strictly searching for roles that are not the default “Team member”, which all team members search and would return every team member and not allow for separation (Volunteers separate to Team members);
  • Process Organization and Profile socialProfiles property (social_links ACF field) in SIA_Organization::get_social_profile_links() and SIA_Profile::get_social_profile_links() for easier Twig processing;
  • Add new constants for ``
  • Only allow team members with manage_board_members permission and on international website to view board member community roles in current_user_can_view_role_option().
  • Only allow team members with manage_board_members permission and on Play to assign board member community roles in current_user_can_assign_role().

Fixes

  • Ensure we’re on Play in SIA_Team::get_members().

8.3.0

New “SIA Team Member” ACF field

In order to pull in Profile on team websites, provide a field that lists all team member profiles.

  • Add the SIA_ACF_field_TeamMember overloading the acf_field_select field;
  • Add the SIA_Profiles_Public::get_team_members() static that loads all active profiles, optionally grouped.

8.2.0

Isolate mandatory SIA team member profile fields

Allow creation of Profiles without email, community role, organization, or occupation outside of SIA Play in order to be able to create partner profiles (no community role) or workshop participant profiles (no organization).

  • Set the 'required' parameter to 0 for specific fields from SIA_Profiles_Admin::filter_acf_fields() hooked to acf/load_field;
  • Replace the prepare_field hook with load_field for SIA_Profiles_Admin::filter_acf_fields() in SIA_Profiles::define_admin_hooks().

8.1.0

Provide better Profile portraits and local profile results.

Refactor the Profile class to provide reliable, better resolution portraits. Add an argument to profile searches to only look on the local website and not switch to Play in order to find profiles of non-team members.

  • New $search_locally argument for both SIA_Profile::get_profile_post_id() and SIA_Profile::get_profile_by_email() which prevents switching to Play when looking for a profile.
  • New SIA_Profile::$thumbnailUrl property set by the new SIA_Profile::get_thumbnail_url() method to provide either the 600x600 cropped portrait (thumbnail_1x1), or a Gravatar;
  • Set the SIA_Profile::$email and SIA_Profile::$portrait properties on instantiation;
  • Increase resolution of the SIA_Profile::$portrait by replacing the portrait-square image size with the 4x larger thumbnail_1x1;

8.0.0

Introduce the licensing status property for teams

7.7.0

Add the is_headquarter method to SIA_Team

7.6.0

Unify the website and wordpressProperties of SIA_Team to match

7.5.0

Start using aliases in the ISO repository to allow for searching by country subdomain

  • New SIA_Profiles_ISO::$aliases constant that stores, by ISO2, the subdomains of teams that have a different subdomain than team post_name;
  • Include the $aliases values when returning from SIA_Profiles_ISO::get_available_slug_ISOs();
  • Add the possibility to search by alias to SIA_Profiles_ISO::get_ISO() (default FALSE) to allow searching by subdomain;
  • Replace the array returned from SIA_Team::get_websites() for the main website with an instance of SIA_Website in order to have the same type of response for the team website and WordPress properties.

7.4.0

Integrate new AAP class as property of SIA_Team

7.3.0

Integrate new AAP class as property of SIA_Team

7.2.1

Fix broken Profile links in Organizations admin table

  • Insulate query filters for admin and public

7.5.0

Instantiate the AAP class with SIA_Team as a constuctor parameter

7.3.0

New user country IG shortcode

7.2.0

Include Jordan (JO) and Italy (IT) in ISO repository

7.1.0

Filter organizations query to provide the archive with only Host and Candidate in the proper order

  • When in organizations post type archive show only active “Host” and “Candidate” via the SIA_Profiles_Public::filter_organizations_status() hooked to pre_get_posts
  • When in organizations post type archive show all organizations on page 1 ordered alphabetically via the order_organizations_alphabetically hooked to pre_get_posts

7.0.0

Allow users with “Coordinator” or “Organizational Lead” community roles to edit own organization

  • On Play, in “organizations” post type context, check if the current user can edit the organization by hooking SIA_Profiles_Public::allow_non_editor_to_edit_own_organization() to map_meta_cap filter
  • Track and sync the new “Featured Image” ACF field group from SIA_Profiles_Admin::maybe_sync_acf() hooked to the admin_init action
  • Sync the new “Logo” ACF field created specifically to allow users to edit their own organization with the Organziation’s post type default “Featured image” field via SIA_Profiles_Admin::update_organization_featured_image() hooked to the acf/update_value/name=organization_logo (field to post) action and SIA_Profiles_Admin::sync_featured_image_update_with_organization_logo_field() hooked to save_post_organizations (post to field) action
  • Load SIA_Organization::socialProfiles from the class’s constructor used in Play (theme) organization single

6.3.2

Start tracking own ACF field groups for import in SIA_Profiles_Admin::maybe_sync_acf() hooked to admin_init

6.3.1.

Maintenance update, only bug fixes

Fix: Notices and lack of blocking fields while updating a profile on the /my-profile/ page because SIA_Profiles_Admin::filter_acf_fields bails out because there is no global $post variable set Fix: Team community roles were shown on profile editing page because current_user_can_view_role_option() was not checking the edit is on Play Fix: Notice thrown by unset $field['faux-disabled'] in SIA_ACF_field_CommunityRole::render_field() Fix: The “Partnerhips Type” was shown on forms where there were no options to select, for example while editing “Organization” on Play, by adding SIA_ACF_field_PartnershipType::prepare_field() Fix: Altering the edit profile links to lead to Play when the user has no SIA Passport by validating the user email in SIA_Profiles_Public::manage_edit_profile_link() and SIA_Profiles_Public::manage_edit_user_link()

6.3.0

Add the URL permalink property to SIA_Organization class

6.1.0

Link the Organization Details “Partnership type” field to Glossary terms

6.0.0

Link the Profile Management “Community Role” field to Glossary terms

5.5.0

Provide an Organization GF field to process Candidate organizations’ account requests

5.4.1

Fix oversights in [user] shortcode implemetation

5.4.0

New SIA_Profiles_ISO::get_slug( $ISO ) needed by RQ REST

5.3.2

Fix inconsistent usage of [user] shortcode params; Fix assuming the current user is a team member in [user].

5.3.1

Fix $only_active param of SIA_Team::getTeam() being ignored by filter_team_status

5.3.0

Display A&AP in Teams admin table

5.2.0

New [user] shortcode and A&AP data in team

  • When the post meta is present, start with all of its data, plus links and urls;
  • Add a new $is_licensor property to SIA_Team, only TRUE for international;
  • When the [user] shortcode is used, return country, A&AP, and website values.

5.1.1

Rename “Lead” into “Scaling Lead”, fix Countries query filter

5.1.0

Rename “Teams” into “Countries”

5.0.0

Profiles and Organizations are available in publishing sites

  • Refactor Profile and Organization construction to load even from outside of the Play directory
  • Introduce the Partnership type and Community roles taxonomies
  • Add a “vertical” property to Organization
  • Adapt admin columns to location (Playbook or not) and role (can manage licensees)

4.11.0

Register Stencil blog id constant, use Deployment post registrar

4.10.0

Refactor post types registration.

4.9.0

Include Slovenia (SI) and Côte d’Ivoire (CI) in ISO repository.

4.8.0

Start using custom post type capabilities.

4.7.7

Fix get_teams static and restore _recent-teams shortcode.

4.7.6

Fix profile user fields being left behind after the profile is deleted.

4.7.5

Fix fetching the profile post id when the profile was deleted, but the field was left behind.

4.7.4

Fix missing search results by using ‘post__not_in’ when filtering teams.

4.7.3

Fix wiping out pre-existing or empty ‘post__in’ when filtering teams.

4.7.2

Fix non-formatted values of custom ACF fields.

4.7.1

Fix search results not following access levels.

4.7.0

Provide pipeline status filter in Organizations admin table.

  • Add the pipeline status filter to admin table;
  • Format status field at ACF field level for consistent results;
  • Fix array status display in admin always displaying ‘Candidate’;
  • Fix leftover Contact status (use Lead).

4.7.0

Provide and display all Team Wordpress properties.

  • New custom ACF Field for WordpressProperties listing all blogs registered in the network;
  • Rename InternalWebsite field to reflect it’s a ‘Team Website’;
  • Refactor non-team blog constants, and create a new ‘non team website’ constant to filter get_blog_ids where necessary (e.g. WordpressProperties ACF Field);
  • Display all properties in admin Teams page.

4.6.4

Fix access to Access Level for non-superadmins.

4.6.3

Remove migration Bulk Actions

4.6.2

Fix avatar-18 size (as seen in Simple History user filter).

4.6.1

Fix reversed $active_only switch in Team::get_team_by_slug.

4.6.0

Add a prefix parameter to Team name, ensure Playbook context.

4.5.0

Use class constants for organization status and user team roles as single source of truth.

  • New custom ACF Field for Organization pipeline status, with options listed in the SIA_Organization class;
  • New custom ACF Field for Team member role, with options listed in the SIA_Profile class;
  • Tighten integration with organization pipeline status and role class constants;
  • Improve language to use ‘pipeline status’ instead of ‘license status’;
  • Add a temporary migration tool to the new field types (from strings to arrays).

Fixes

  • Fix initialization of Organization and Profile missing switch to Playbook blog, where necessary.

4.4.0

Refactored team, organization, and profile status constants.

4.3.0

Moved all account locking functionality to RQ.

3.2.0

Enforce log in with SIA Passport

When the user trying to log in has an active SIA Passport, disable:

  • logging in with username / email and password;
  • recovering a password for a SIA Passport.
  • Commit: 50f46918
  • Published: 22.07.2019
  • Announced: 23.07.2019
  • Rolled out: 29.07.2019