public static function run() { $di = \Phalcon\Di::getDefault(); $em = $di->get('em'); // Assemble news items from other sources. $news_items_raw = array(self::_runTumblrNews($di), self::_runConventionPromotions($di), self::_runPodcastEpisodes($di), self::_runScheduleItems($di)); $news_items = array(); foreach ($news_items_raw as $item_group) { $news_items = array_merge($news_items, (array) $item_group); } // Replace/insert into database. $news_stats = array('inserted' => 0, 'updated' => 0, 'deleted' => 0); if (!empty($news_items)) { $old_news_raw = NetworkNews::fetchAll(); $old_news = array(); foreach ($old_news_raw as $old_row) { $old_news[$old_row->id] = $old_row; } // Update or insert items. foreach ($news_items as $item) { if (isset($old_news[$item['id']])) { $news_stats['updated']++; $record = $old_news[$item['id']]; } else { $news_stats['inserted']++; $record = new NetworkNews(); } $record->fromArray($item); $em->persist($record); unset($old_news[$item['id']]); } // Delete unreferenced items. foreach ($old_news as $item_id => $item_to_remove) { $news_stats['deleted']++; $em->remove($item_to_remove); } $em->flush(); // Flush cache of homepage news. \DF\Cache::remove('homepage_featured_news'); } \PVL\Debug::print_r($news_stats); }