Loading app/Helpers/rss_helper.php +64 −59 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ function get_rss_feed($podcast, $serviceSlug = '') 'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md'; $rss = new SimpleRSSElement( "<?xml version='1.0' encoding='utf-8'?><rss version='2.0' xmlns:itunes='$itunes_namespace' xmlns:podcast='$podcast_namespace' xmlns:content='http://purl.org/rss/1.0/modules/content/'></rss>" "<?xml version='1.0' encoding='utf-8'?><rss version='2.0' xmlns:itunes='$itunes_namespace' xmlns:podcast='$podcast_namespace' xmlns:content='http://purl.org/rss/1.0/modules/content/'></rss>", ); $channel = $rss->addChild('channel'); Loading @@ -35,7 +35,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $atom_link = $channel->addChild( 'atom:link', null, 'http://www.w3.org/2005/Atom' 'http://www.w3.org/2005/Atom', ); $atom_link->addAttribute('href', $podcast->feed_url); $atom_link->addAttribute('rel', 'self'); Loading @@ -45,18 +45,18 @@ function get_rss_feed($podcast, $serviceSlug = '') $channel->addChild( 'new-feed-url', $podcast->new_feed_url, $itunes_namespace $itunes_namespace, ); } // the last build date corresponds to the creation of the feed.xml cache $channel->addChild( 'lastBuildDate', (new Time('now'))->format(DATE_RFC1123) (new Time('now'))->format(DATE_RFC1123), ); $channel->addChild( 'generator', 'Castopod 0.0.0-development - https://castopod.org/' 'Castopod 0.0.0-development - https://castopod.org/', ); $channel->addChild('docs', 'https://cyber.harvard.edu/rss/rss.html'); Loading @@ -69,7 +69,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $locationElement = $channel->addChild( 'location', htmlspecialchars($podcast->location_name), $podcast_namespace $podcast_namespace, ); if (!empty($podcast->location_geo)) { $locationElement->addAttribute('geo', $podcast->location_geo); Loading @@ -86,7 +86,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $recipientElement = $valueElement->addChild( 'valueRecipient', null, $podcast_namespace $podcast_namespace, ); $recipientElement->addAttribute('name', $podcast->owner_name); $recipientElement->addAttribute('type', 'ILP'); Loading @@ -97,14 +97,14 @@ function get_rss_feed($podcast, $serviceSlug = '') ->addChild( 'locked', $podcast->is_locked ? 'yes' : 'no', $podcast_namespace $podcast_namespace, ) ->addAttribute('owner', $podcast->owner_email); if (!empty($podcast->imported_feed_url)) { $channel->addChild( 'previousUrl', $podcast->imported_feed_url, $podcast_namespace $podcast_namespace, ); } Loading @@ -112,22 +112,22 @@ function get_rss_feed($podcast, $serviceSlug = '') $podcastingPlatformElement = $channel->addChild( 'id', null, $podcast_namespace $podcast_namespace, ); $podcastingPlatformElement->addAttribute( 'platform', $podcastingPlatform->slug $podcastingPlatform->slug, ); if (!empty($podcastingPlatform->link_content)) { $podcastingPlatformElement->addAttribute( 'id', $podcastingPlatform->link_content $podcastingPlatform->link_content, ); } if (!empty($podcastingPlatform->link_url)) { $podcastingPlatformElement->addAttribute( 'url', htmlspecialchars($podcastingPlatform->link_url) htmlspecialchars($podcastingPlatform->link_url), ); } } Loading @@ -136,13 +136,13 @@ function get_rss_feed($podcast, $serviceSlug = '') $socialPlatformElement = $channel->addChild( 'social', $socialPlatform->link_content, $podcast_namespace $podcast_namespace, ); $socialPlatformElement->addAttribute('platform', $socialPlatform->slug); if (!empty($socialPlatform->link_url)) { $socialPlatformElement->addAttribute( 'url', htmlspecialchars($socialPlatform->link_url) htmlspecialchars($socialPlatform->link_url), ); } } Loading @@ -151,16 +151,16 @@ function get_rss_feed($podcast, $serviceSlug = '') $fundingPlatformElement = $channel->addChild( 'funding', $fundingPlatform->link_content, $podcast_namespace $podcast_namespace, ); $fundingPlatformElement->addAttribute( 'platform', $fundingPlatform->slug $fundingPlatform->slug, ); if (!empty($socialPlatform->link_url)) { $fundingPlatformElement->addAttribute( 'url', htmlspecialchars($fundingPlatform->link_url) htmlspecialchars($fundingPlatform->link_url), ); } } Loading @@ -169,7 +169,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $podcastPersonElement = $channel->addChild( 'person', htmlspecialchars($podcastPerson->person->full_name), $podcast_namespace $podcast_namespace, ); if ( !empty($podcastPerson->person_role) && Loading @@ -181,9 +181,9 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$podcastPerson->person_group}.roles.{$podcastPerson->person_role}.label", [], 'en' ) ) 'en', ), ), ); } if (!empty($podcastPerson->person_group)) { Loading @@ -193,19 +193,19 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$podcastPerson->person_group}.label", [], 'en' ) ) 'en', ), ), ); } $podcastPersonElement->addAttribute( 'img', $podcastPerson->person->image->large_url $podcastPerson->person->image->large_url, ); if (!empty($podcastPerson->person->information_url)) { $podcastPersonElement->addAttribute( 'href', $podcastPerson->person->information_url $podcastPerson->person->information_url, ); } } Loading @@ -219,11 +219,14 @@ function get_rss_feed($podcast, $serviceSlug = '') $channel->addChild( 'explicit', $podcast->parental_advisory === 'explicit' ? 'true' : 'false', $itunes_namespace $itunes_namespace, ); $podcast->publisher && $channel->addChild('author', $podcast->publisher, $itunes_namespace); $channel->addChild( 'author', $podcast->publisher ? $podcast->publisher : $podcast->owner_name, $itunes_namespace, ); $channel->addChild('link', $podcast->link); $owner = $channel->addChild('owner', null, $itunes_namespace); Loading @@ -247,7 +250,7 @@ function get_rss_feed($podcast, $serviceSlug = '') [ 'elements' => $podcast->custom_rss, ], $channel $channel, ); } Loading @@ -259,7 +262,9 @@ function get_rss_feed($podcast, $serviceSlug = '') $enclosure->addAttribute( 'url', $episode->enclosure_url . (empty($serviceSlug) ? '' : '?_from=' . urlencode($serviceSlug)) (empty($serviceSlug) ? '' : '?_from=' . urlencode($serviceSlug)), ); $enclosure->addAttribute('length', $episode->enclosure_filesize); $enclosure->addAttribute('type', $episode->enclosure_mimetype); Loading @@ -267,13 +272,13 @@ function get_rss_feed($podcast, $serviceSlug = '') $item->addChild('guid', $episode->guid); $item->addChild( 'pubDate', $episode->published_at->format(DATE_RFC1123) $episode->published_at->format(DATE_RFC1123), ); if (!empty($episode->location_name)) { $locationElement = $item->addChild( 'location', htmlspecialchars($episode->location_name), $podcast_namespace $podcast_namespace, ); if (!empty($episode->location_geo)) { $locationElement->addAttribute('geo', $episode->location_geo); Loading @@ -284,18 +289,18 @@ function get_rss_feed($podcast, $serviceSlug = '') } $item->addChildWithCDATA( 'description', $episode->getDescriptionHtml($serviceSlug) $episode->getDescriptionHtml($serviceSlug), ); $item->addChild( 'duration', $episode->enclosure_duration, $itunes_namespace $itunes_namespace, ); $item->addChild('link', $episode->link); $episode_itunes_image = $item->addChild( 'image', null, $itunes_namespace $itunes_namespace, ); $episode_itunes_image->addAttribute('href', $episode->image->feed_url); Loading @@ -303,7 +308,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $item->addChild( 'explicit', $episode->parental_advisory === 'explicit' ? 'true' : 'false', $itunes_namespace $itunes_namespace, ); $episode->number && Loading @@ -312,7 +317,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $item->addChild( 'season', $episode->season_number, $itunes_namespace $itunes_namespace, ); $item->addChild('episodeType', $episode->type, $itunes_namespace); Loading @@ -320,18 +325,18 @@ function get_rss_feed($podcast, $serviceSlug = '') $transcriptElement = $item->addChild( 'transcript', null, $podcast_namespace $podcast_namespace, ); $transcriptElement->addAttribute('url', $episode->transcriptUrl); $transcriptElement->addAttribute( 'type', Mimes::guessTypeFromExtension( pathinfo($episode->transcript_uri, PATHINFO_EXTENSION) ) pathinfo($episode->transcript_uri, PATHINFO_EXTENSION), ), ); $transcriptElement->addAttribute( 'language', $podcast->language_code $podcast->language_code, ); } Loading @@ -339,7 +344,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $chaptersElement = $item->addChild( 'chapters', null, $podcast_namespace $podcast_namespace, ); $chaptersElement->addAttribute('url', $episode->chaptersUrl); $chaptersElement->addAttribute('type', 'application/json+chapters'); Loading @@ -349,11 +354,11 @@ function get_rss_feed($podcast, $serviceSlug = '') $soundbiteElement = $item->addChild( 'soundbite', empty($soundbite->label) ? null : $soundbite->label, $podcast_namespace $podcast_namespace, ); $soundbiteElement->addAttribute( 'start_time', $soundbite->start_time $soundbite->start_time, ); $soundbiteElement->addAttribute('duration', $soundbite->duration); } Loading @@ -362,7 +367,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $episodePersonElement = $item->addChild( 'person', htmlspecialchars($episodePerson->person->full_name), $podcast_namespace $podcast_namespace, ); if ( !empty($episodePerson->person_role) && Loading @@ -374,9 +379,9 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$episodePerson->person_group}.roles.{$episodePerson->person_role}.label", [], 'en' ) ) 'en', ), ), ); } if (!empty($episodePerson->person_group)) { Loading @@ -386,19 +391,19 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$episodePerson->person_group}.label", [], 'en' ) ) 'en', ), ), ); } $episodePersonElement->addAttribute( 'img', $episodePerson->person->image->large_url $episodePerson->person->image->large_url, ); if (!empty($episodePerson->person->information_url)) { $episodePersonElement->addAttribute( 'href', $episodePerson->person->information_url $episodePerson->person->information_url, ); } } Loading @@ -411,7 +416,7 @@ function get_rss_feed($podcast, $serviceSlug = '') [ 'elements' => $episode->custom_rss, ], $item $item, ); } } Loading @@ -436,14 +441,14 @@ function add_category_tag($node, $category) 'text', $category->parent ? $category->parent->apple_category : $category->apple_category : $category->apple_category, ); if ($category->parent) { $itunes_category_child = $itunes_category->addChild( 'category', null, $itunes_namespace $itunes_namespace, ); $itunes_category_child->addAttribute('text', $category->apple_category); $node->addChild('category', $category->parent->apple_category); Loading Loading @@ -503,7 +508,7 @@ function array_to_rss($arrayNode, &$xmlNode) : null, empty($childArrayNode['namespace']) ? null : current($childArrayNode['namespace']) : current($childArrayNode['namespace']), ); if (array_key_exists('attributes', $childArrayNode)) { foreach ( Loading Loading
app/Helpers/rss_helper.php +64 −59 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ function get_rss_feed($podcast, $serviceSlug = '') 'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md'; $rss = new SimpleRSSElement( "<?xml version='1.0' encoding='utf-8'?><rss version='2.0' xmlns:itunes='$itunes_namespace' xmlns:podcast='$podcast_namespace' xmlns:content='http://purl.org/rss/1.0/modules/content/'></rss>" "<?xml version='1.0' encoding='utf-8'?><rss version='2.0' xmlns:itunes='$itunes_namespace' xmlns:podcast='$podcast_namespace' xmlns:content='http://purl.org/rss/1.0/modules/content/'></rss>", ); $channel = $rss->addChild('channel'); Loading @@ -35,7 +35,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $atom_link = $channel->addChild( 'atom:link', null, 'http://www.w3.org/2005/Atom' 'http://www.w3.org/2005/Atom', ); $atom_link->addAttribute('href', $podcast->feed_url); $atom_link->addAttribute('rel', 'self'); Loading @@ -45,18 +45,18 @@ function get_rss_feed($podcast, $serviceSlug = '') $channel->addChild( 'new-feed-url', $podcast->new_feed_url, $itunes_namespace $itunes_namespace, ); } // the last build date corresponds to the creation of the feed.xml cache $channel->addChild( 'lastBuildDate', (new Time('now'))->format(DATE_RFC1123) (new Time('now'))->format(DATE_RFC1123), ); $channel->addChild( 'generator', 'Castopod 0.0.0-development - https://castopod.org/' 'Castopod 0.0.0-development - https://castopod.org/', ); $channel->addChild('docs', 'https://cyber.harvard.edu/rss/rss.html'); Loading @@ -69,7 +69,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $locationElement = $channel->addChild( 'location', htmlspecialchars($podcast->location_name), $podcast_namespace $podcast_namespace, ); if (!empty($podcast->location_geo)) { $locationElement->addAttribute('geo', $podcast->location_geo); Loading @@ -86,7 +86,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $recipientElement = $valueElement->addChild( 'valueRecipient', null, $podcast_namespace $podcast_namespace, ); $recipientElement->addAttribute('name', $podcast->owner_name); $recipientElement->addAttribute('type', 'ILP'); Loading @@ -97,14 +97,14 @@ function get_rss_feed($podcast, $serviceSlug = '') ->addChild( 'locked', $podcast->is_locked ? 'yes' : 'no', $podcast_namespace $podcast_namespace, ) ->addAttribute('owner', $podcast->owner_email); if (!empty($podcast->imported_feed_url)) { $channel->addChild( 'previousUrl', $podcast->imported_feed_url, $podcast_namespace $podcast_namespace, ); } Loading @@ -112,22 +112,22 @@ function get_rss_feed($podcast, $serviceSlug = '') $podcastingPlatformElement = $channel->addChild( 'id', null, $podcast_namespace $podcast_namespace, ); $podcastingPlatformElement->addAttribute( 'platform', $podcastingPlatform->slug $podcastingPlatform->slug, ); if (!empty($podcastingPlatform->link_content)) { $podcastingPlatformElement->addAttribute( 'id', $podcastingPlatform->link_content $podcastingPlatform->link_content, ); } if (!empty($podcastingPlatform->link_url)) { $podcastingPlatformElement->addAttribute( 'url', htmlspecialchars($podcastingPlatform->link_url) htmlspecialchars($podcastingPlatform->link_url), ); } } Loading @@ -136,13 +136,13 @@ function get_rss_feed($podcast, $serviceSlug = '') $socialPlatformElement = $channel->addChild( 'social', $socialPlatform->link_content, $podcast_namespace $podcast_namespace, ); $socialPlatformElement->addAttribute('platform', $socialPlatform->slug); if (!empty($socialPlatform->link_url)) { $socialPlatformElement->addAttribute( 'url', htmlspecialchars($socialPlatform->link_url) htmlspecialchars($socialPlatform->link_url), ); } } Loading @@ -151,16 +151,16 @@ function get_rss_feed($podcast, $serviceSlug = '') $fundingPlatformElement = $channel->addChild( 'funding', $fundingPlatform->link_content, $podcast_namespace $podcast_namespace, ); $fundingPlatformElement->addAttribute( 'platform', $fundingPlatform->slug $fundingPlatform->slug, ); if (!empty($socialPlatform->link_url)) { $fundingPlatformElement->addAttribute( 'url', htmlspecialchars($fundingPlatform->link_url) htmlspecialchars($fundingPlatform->link_url), ); } } Loading @@ -169,7 +169,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $podcastPersonElement = $channel->addChild( 'person', htmlspecialchars($podcastPerson->person->full_name), $podcast_namespace $podcast_namespace, ); if ( !empty($podcastPerson->person_role) && Loading @@ -181,9 +181,9 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$podcastPerson->person_group}.roles.{$podcastPerson->person_role}.label", [], 'en' ) ) 'en', ), ), ); } if (!empty($podcastPerson->person_group)) { Loading @@ -193,19 +193,19 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$podcastPerson->person_group}.label", [], 'en' ) ) 'en', ), ), ); } $podcastPersonElement->addAttribute( 'img', $podcastPerson->person->image->large_url $podcastPerson->person->image->large_url, ); if (!empty($podcastPerson->person->information_url)) { $podcastPersonElement->addAttribute( 'href', $podcastPerson->person->information_url $podcastPerson->person->information_url, ); } } Loading @@ -219,11 +219,14 @@ function get_rss_feed($podcast, $serviceSlug = '') $channel->addChild( 'explicit', $podcast->parental_advisory === 'explicit' ? 'true' : 'false', $itunes_namespace $itunes_namespace, ); $podcast->publisher && $channel->addChild('author', $podcast->publisher, $itunes_namespace); $channel->addChild( 'author', $podcast->publisher ? $podcast->publisher : $podcast->owner_name, $itunes_namespace, ); $channel->addChild('link', $podcast->link); $owner = $channel->addChild('owner', null, $itunes_namespace); Loading @@ -247,7 +250,7 @@ function get_rss_feed($podcast, $serviceSlug = '') [ 'elements' => $podcast->custom_rss, ], $channel $channel, ); } Loading @@ -259,7 +262,9 @@ function get_rss_feed($podcast, $serviceSlug = '') $enclosure->addAttribute( 'url', $episode->enclosure_url . (empty($serviceSlug) ? '' : '?_from=' . urlencode($serviceSlug)) (empty($serviceSlug) ? '' : '?_from=' . urlencode($serviceSlug)), ); $enclosure->addAttribute('length', $episode->enclosure_filesize); $enclosure->addAttribute('type', $episode->enclosure_mimetype); Loading @@ -267,13 +272,13 @@ function get_rss_feed($podcast, $serviceSlug = '') $item->addChild('guid', $episode->guid); $item->addChild( 'pubDate', $episode->published_at->format(DATE_RFC1123) $episode->published_at->format(DATE_RFC1123), ); if (!empty($episode->location_name)) { $locationElement = $item->addChild( 'location', htmlspecialchars($episode->location_name), $podcast_namespace $podcast_namespace, ); if (!empty($episode->location_geo)) { $locationElement->addAttribute('geo', $episode->location_geo); Loading @@ -284,18 +289,18 @@ function get_rss_feed($podcast, $serviceSlug = '') } $item->addChildWithCDATA( 'description', $episode->getDescriptionHtml($serviceSlug) $episode->getDescriptionHtml($serviceSlug), ); $item->addChild( 'duration', $episode->enclosure_duration, $itunes_namespace $itunes_namespace, ); $item->addChild('link', $episode->link); $episode_itunes_image = $item->addChild( 'image', null, $itunes_namespace $itunes_namespace, ); $episode_itunes_image->addAttribute('href', $episode->image->feed_url); Loading @@ -303,7 +308,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $item->addChild( 'explicit', $episode->parental_advisory === 'explicit' ? 'true' : 'false', $itunes_namespace $itunes_namespace, ); $episode->number && Loading @@ -312,7 +317,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $item->addChild( 'season', $episode->season_number, $itunes_namespace $itunes_namespace, ); $item->addChild('episodeType', $episode->type, $itunes_namespace); Loading @@ -320,18 +325,18 @@ function get_rss_feed($podcast, $serviceSlug = '') $transcriptElement = $item->addChild( 'transcript', null, $podcast_namespace $podcast_namespace, ); $transcriptElement->addAttribute('url', $episode->transcriptUrl); $transcriptElement->addAttribute( 'type', Mimes::guessTypeFromExtension( pathinfo($episode->transcript_uri, PATHINFO_EXTENSION) ) pathinfo($episode->transcript_uri, PATHINFO_EXTENSION), ), ); $transcriptElement->addAttribute( 'language', $podcast->language_code $podcast->language_code, ); } Loading @@ -339,7 +344,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $chaptersElement = $item->addChild( 'chapters', null, $podcast_namespace $podcast_namespace, ); $chaptersElement->addAttribute('url', $episode->chaptersUrl); $chaptersElement->addAttribute('type', 'application/json+chapters'); Loading @@ -349,11 +354,11 @@ function get_rss_feed($podcast, $serviceSlug = '') $soundbiteElement = $item->addChild( 'soundbite', empty($soundbite->label) ? null : $soundbite->label, $podcast_namespace $podcast_namespace, ); $soundbiteElement->addAttribute( 'start_time', $soundbite->start_time $soundbite->start_time, ); $soundbiteElement->addAttribute('duration', $soundbite->duration); } Loading @@ -362,7 +367,7 @@ function get_rss_feed($podcast, $serviceSlug = '') $episodePersonElement = $item->addChild( 'person', htmlspecialchars($episodePerson->person->full_name), $podcast_namespace $podcast_namespace, ); if ( !empty($episodePerson->person_role) && Loading @@ -374,9 +379,9 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$episodePerson->person_group}.roles.{$episodePerson->person_role}.label", [], 'en' ) ) 'en', ), ), ); } if (!empty($episodePerson->person_group)) { Loading @@ -386,19 +391,19 @@ function get_rss_feed($podcast, $serviceSlug = '') lang( "PersonsTaxonomy.persons.{$episodePerson->person_group}.label", [], 'en' ) ) 'en', ), ), ); } $episodePersonElement->addAttribute( 'img', $episodePerson->person->image->large_url $episodePerson->person->image->large_url, ); if (!empty($episodePerson->person->information_url)) { $episodePersonElement->addAttribute( 'href', $episodePerson->person->information_url $episodePerson->person->information_url, ); } } Loading @@ -411,7 +416,7 @@ function get_rss_feed($podcast, $serviceSlug = '') [ 'elements' => $episode->custom_rss, ], $item $item, ); } } Loading @@ -436,14 +441,14 @@ function add_category_tag($node, $category) 'text', $category->parent ? $category->parent->apple_category : $category->apple_category : $category->apple_category, ); if ($category->parent) { $itunes_category_child = $itunes_category->addChild( 'category', null, $itunes_namespace $itunes_namespace, ); $itunes_category_child->addAttribute('text', $category->apple_category); $node->addChild('category', $category->parent->apple_category); Loading Loading @@ -503,7 +508,7 @@ function array_to_rss($arrayNode, &$xmlNode) : null, empty($childArrayNode['namespace']) ? null : current($childArrayNode['namespace']) : current($childArrayNode['namespace']), ); if (array_key_exists('attributes', $childArrayNode)) { foreach ( Loading