Problem/Motivation

The Varbase Podcasts Base project has just been created and its repository is empty. Varbase ships base recipes for the content models a site actually publishes (Varbase News Base, Varbase Blog Base, Varbase Page Base) but has none for podcasts, so the whole podcast episode model currently lives inside the RightUp site template: the content type, its fields, four field storages, the form and view displays, and their Drupal Canvas content templates. Any other site wanting podcasts has to copy that out of a site template, and improvements made for one site do not reach the others.

Two smaller problems come with it:

  • There is no podcasts view anywhere. An episode page cannot list related episodes from data, so a site template has to hard-code those cards.
  • Two configs an episode depends on are not shipped by any recipe and only exist because the install environment creates them: the full view display for the Podcast content type, and the Simple Sitemap bundle settings for that type. That makes rendering and sitemap inclusion dependent on install order rather than on declared configuration.

Steps to reproduce

  1. Look at the Varbase Podcasts Base repository: it is empty, with no 1.0.x branch and no release.
  2. Install Varbase 11.0.x and look for a podcast content model in the base recipes: there is none.
  3. Look for a podcasts view: there is none, so no listing of episodes can be rendered from data.
  4. Inspect a site built from the RightUp site template: the whole podcast episode model is carried by that site template rather than by a recipe of its own.

Proposed resolution

Initialize this project with the Varbase Podcasts Base recipe on a 1.0.x branch, owning the podcast episode model and nothing above it. It follows the structure of Varbase News Base.

Content type. Podcast (podcast), with Description, Featured Image (cover art), Content (transcript), Audio file, Audio URL, Duration, Episode Number and Tags. An episode carries either a self-hosted file or a remote URL, both optional, so it can be drafted before its audio exists and the theme chooses which player to render.

Field storages owned by the recipe: field_audio, field_audio_url, field_duration, field_episode_number. The shared storages (field_description, field_content, field_featured_image, field_tags) keep coming from Drupal CMS Content Type Base rather than being re-declared.

Dependencies: Varbase Content Base, Varbase Media Base, Varbase SEO Base and Varbase Workflow Base: reusing what Varbase already provides.

Views. A podcasts view (views.view.podcasts) with all, latest, related, featured and RSS displays. The related display is what an episode page needs for a "More Episodes" rail. It deliberately ships no page display: the podcasts landing page belongs to the site template, which may serve it from a Drupal Canvas page, and a view page at /podcasts would collide with that.

Explicit configuration. The full view display for the Podcast content type and the Simple Sitemap bundle settings are shipped in the recipe rather than left to the install environment.

Also included: view displays and Drupal Canvas content templates for full, card and text_card_medium; a Pathauto pattern; editorial workflow support (Podcast added to the Varbase editorial workflow); and role permissions for anonymous, authenticated, content editor, content admin, SEO admin and site admin.

The two points "ship the full view display and the sitemap settings explicitly" and "one view per content type" were taken from the Uber Publisher module set, which solved the same problems for a publisher site.

Verification already done

Built locally and applied on a Varbase 11 site:

  • 24 configuration files, all valid YAML; composer.json valid.
  • The recipe applies successfully with drush recipe. Note for reviewers: applying it on a site that already has its dependency recipes applied fails on unrelated drift in Varbase Media Base (the bulk upload form display for the Audio media type "exists already and does not match"); not on this recipe's own configuration. Applying this recipe's config in isolation succeeds.
  • The view returns real data: all = 7 episodes, latest = 3, featured = 2. The related display returns 0 when executed without a tag context, as expected.

Remaining tasks

  • Push the initial recipe to the 1.0.x branch.
  • Create the 1.0.x-dev release.
  • Add the GitLab CI pipeline and get it green.
  • Move the podcast configuration out of the RightUp site template and depend on this recipe instead: 20 configs move; RightUp keeps only its theme-specific Drupal Canvas component config.
  • Wire the related display into the episode page so the "More Episodes" rail renders from data (tracked for RightUp in #3622688).
  • Decide whether a search result view mode belongs here, so episodes render correctly in search listings.

User interface changes

  • A new Podcast content type, its node add/edit form, and its full, card and text card medium renderings.

API changes

  • N/A

Data model changes

  • A new podcast node bundle and four new field storages: field_audio, field_audio_url, field_duration, field_episode_number.

Release notes snippet

  • Initial Varbase Podcasts Base recipe: the Podcast content type with audio file, audio URL, duration and episode number, its Drupal Canvas content templates, a podcasts view with all, latest, related, featured and RSS displays, a Pathauto pattern, editorial workflow support and role permissions.

Checkpoints

  • ✅ File an issue
  • ❌ Addition/Change/Update/Fix
  • ❌ Testing to ensure no regression
  • ❌ Automated unit testing coverage
  • ❌ Automated functional testing coverage
  • ❌ UX/UI designer responsibilities
  • ❌ Readability
  • ❌ Accessibility
  • ❌ Performance
  • ❌ Security
  • ❌ Developer Documentation
  • ❌ User Guide Documentation
  • ❌ Reviewed by a human
  • ❌ Code review by maintainers
  • ❌ Full testing and approval
  • ❌ Credit contributors
  • ❌ Review with the product owner
  • ❌ Release notes snippet
  • ❌ Release

AI-Generated: Yes

Comments

rajab natshah created an issue. See original summary.

rajab natshah’s picture

Version: » 1.0.x-dev
Status: Active » Fixed

Shipped in the first release, 1.0.0-alpha1: https://www.drupal.org/project/varbase_podcasts_base/releases/1.0.0-alpha1

The recipe now owns the Podcast content type, its field storages, the form and view displays, the Drupal Canvas content templates, the podcasts view with its all, latest, related, featured and RSS displays, the Pathauto pattern, editorial workflow and role permissions.

One question from the remaining tasks is still open, whether episodes need a search result view mode. That belongs in its own issue if it turns out they do.

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.