. * * @category Account * @package StatusNet * @author Evan Prodromou * @copyright 2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ if (!defined('STATUSNET')) { // This check helps protect against security problems; // your code file can't be executed directly from the web. exit(1); } /** * Importer for feeds of activities * * Takes an XML file representing a feed of activities and imports each * activity to the user in question. * * @category Account * @package StatusNet * @author Evan Prodromou * @copyright 2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ class FeedImporter extends QueueHandler { /** * Transport identifier * * @return string identifier for this queue handler */ public function transport() { return 'feedimp'; } function handle($data) { list($user, $xml, $trusted) = $data; try { $doc = DOMDocument::loadXML($xml); if ($doc->documentElement->namespaceURI != Activity::ATOM || $doc->documentElement->localName != 'feed') { throw new ClientException(_("Not an atom feed.")); } $feed = $doc->documentElement; $author = ActivityUtils::getFeedAuthor($feed); if (empty($author)) { throw new ClientException(_("No author in the feed.")); } if (empty($user)) { if ($trusted) { $user = $this->userFromAuthor($author); } } $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry'); $activities = $this->entriesToActivities($entries, $feed); $qm = QueueManager::get(); foreach ($activities as $activity) { $qm->enqueue(array($user, $author, $activity, $trusted), 'actimp'); } } catch (ClientException $ce) { common_log(LOG_WARNING, $ce->getMessage()); return true; } catch (ServerException $se) { common_log(LOG_ERR, $ce->getMessage()); return false; } catch (Exception $e) { common_log(LOG_ERR, $ce->getMessage()); return false; } } function userFromAuthor($author) { $user = User::staticGet('uri', $author->id); if (empty($user)) { $attrs = array('nickname' => Ostatus_profile::getActivityObjectNickname($author), 'uri' => $author->id); $user = User::register($attrs); } $profile = $user->getProfile(); Ostatus_profile::updateProfile($profile, $author); // FIXME: Update avatar return $user; } }