distinct() ->select('podcasts.*') ->join('episodes', 'podcasts.id = episodes.podcast_id', 'left outer') ->where('podcasts.is_published_on_hubs', false) ->where('`' . $podcastModel->db->getPrefix() . 'podcasts`.`published_at` <= UTC_TIMESTAMP()', null, false) ->orGroupStart() ->where('episodes.is_published_on_hubs', false) ->where('`' . $podcastModel->db->getPrefix() . 'episodes`.`published_at` <= UTC_TIMESTAMP()', null, false) ->groupEnd() ->findAll(); if ($podcasts === []) { return; } $request = Services::curlrequest(); $requestOptions = [ 'headers' => [ 'User-Agent' => 'Castopod/' . CP_VERSION . '; +' . base_url('', 'https'), 'Content-Type' => 'application/x-www-form-urlencoded', ], ]; $hubUrls = config('WebSub') ->hubs; foreach ($podcasts as $podcast) { $requestOptions['form_params'] = [ 'hub.mode' => 'publish', 'hub.url' => $podcast->feed_url, ]; foreach ($hubUrls as $hub) { try { $request->post($hub, $requestOptions); } catch (Exception $exception) { log_message( 'critical', "COULD NOT PUBLISH @{$podcast->handle} ON {$hub}" . PHP_EOL . $exception->getMessage() ); } } // set podcast feed as having been pushed onto hubs (new PodcastModel())->update($podcast->id, [ 'is_published_on_hubs' => true, ]); // set newly published episodes as pushed onto hubs (new EpisodeModel())->set('is_published_on_hubs', true) ->where([ 'podcast_id' => $podcast->id, 'is_published_on_hubs' => false, ]) ->where('`published_at` <= UTC_TIMESTAMP()', null, false) ->update(); } } }