'node', 'W' => 'way', 'R' => 'relation'][ substr($locationOsmid, 0, 1) ] . '/' . substr($locationOsmid, 1); } if (!empty($locationGeo)) { return 'https://www.openstreetmap.org/#map=17/' . str_replace(',', '/', substr($locationGeo, 4)); } return 'https://www.openstreetmap.org/search?query=' . urlencode($locationName); } } //-------------------------------------------------------------------- if (!function_exists('extract_params_from_episode_uri')) { /** * Returns podcast name and episode slug from episode string uri * * @param URI $episodeUri */ function extract_params_from_episode_uri($episodeUri): ?array { preg_match( '~@(?P[a-zA-Z0-9\_]{1,32})\/episodes\/(?P[a-zA-Z0-9\-]{1,191})~', $episodeUri->getPath(), $matches, ); if ($matches === []) { return null; } if ( !array_key_exists('podcastName', $matches) || !array_key_exists('episodeSlug', $matches) ) { return null; } return [ 'podcastName' => $matches['podcastName'], 'episodeSlug' => $matches['episodeSlug'], ]; } }