protected function get_feed(Application $app, appbox $appbox, User $user, $pub_restrict, $homelink) { $user_key = 'user_' . $user->getId(); if ($homelink == '1') { $feed_key = 'feed_homelink'; } elseif ($pub_restrict == '1') { $feed_key = 'feed_restricted'; } else { $feed_key = 'feed_public'; } if (!array_key_exists($user_key, self::$feeds) || !isset(self::$feeds[$user_key][$feed_key])) { if ($homelink == '1') { $title = $user->getDisplayName() . ' - ' . 'homelink Feed'; } elseif ($pub_restrict == '1') { $title = $user->getDisplayName() . ' - ' . 'private Feed'; } else { $title = $user->getDisplayName() . ' - ' . 'public Feed'; } $feed = new Feed(); $publisher = new FeedPublisher(); $feed->setTitle('title'); $feed->setSubtitle(''); $feed->addPublisher($publisher); $publisher->setFeed($feed); $publisher->setIsOwner(true); $publisher->setUser($user); if ($homelink) { $feed->setIsPublic(true); $app['orm.em']->persist($feed); $app['orm.em']->persist($user); $app['orm.em']->flush(); } elseif ($pub_restrict == 1) { $collections = $app->getAclForUser($user)->get_granted_base(); $collection = array_shift($collections); if (!$collection instanceof collection) { foreach ($appbox->get_databoxes() as $databox) { foreach ($databox->get_collections() as $coll) { $collection = $coll; break; } if ($collection instanceof collection) { break; } } } if (!$collection instanceof collection) { return false; } $feed->setCollection($collection); } self::$feeds[$user_key][$feed_key] = $feed; } else { $feed = self::$feeds[$user_key][$feed_key]; } return $feed; }
/** * {@inheritdoc} */ public function apply(base $appbox, Application $app) { if (false === $this->hasFeedBackup($app)) { return false; } $sql = 'DELETE FROM Feeds'; $stmt = $app->getApplicationBox()->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $sql = 'DELETE FROM FeedEntries'; $stmt = $app->getApplicationBox()->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $sql = 'DELETE FROM FeedPublishers'; $stmt = $app->getApplicationBox()->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $sql = 'DELETE FROM FeedItems'; $stmt = $app->getApplicationBox()->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $sql = 'DELETE FROM FeedTokens'; $stmt = $app->getApplicationBox()->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $sql = 'DELETE FROM AggregateTokens'; $stmt = $app->getApplicationBox()->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); $conn = $app->getApplicationBox()->get_connection(); $sql = 'SELECT id, title, subtitle, public, created_on, updated_on, base_id FROM feeds_backup;'; $stmt = $conn->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $n = 0; $em = $app['orm.em']; $fpSql = 'SELECT id, usr_id, owner, created_on FROM feed_publishers WHERE feed_id = :feed_id;'; $fpStmt = $conn->prepare($fpSql); $feSql = 'SELECT id, title, description, created_on, updated_on, author_name, author_email FROM feed_entries WHERE feed_id = :feed_id AND publisher = :publisher_id;'; $feStmt = $conn->prepare($feSql); $fiSql = 'SELECT sbas_id, record_id, ord FROM feed_entry_elements WHERE entry_id = :entry_id;'; $fiStmt = $conn->prepare($fiSql); $ftSql = 'SELECT token, usr_id, aggregated FROM feed_tokens WHERE feed_id = :feed_id;'; $ftStmt = $conn->prepare($ftSql); $faSql = 'SELECT token, usr_id FROM feed_tokens WHERE aggregated = 1;'; $faStmt = $conn->prepare($faSql); foreach ($rs as $row) { $feed = new Feed(); $feed->setTitle($row['title']); $feed->setSubtitle($row['subtitle']); $feed->setIconUrl(false); $feed->setIsPublic($row['public']); $feed->setCreatedOn(new \DateTime($row['created_on'])); $feed->setUpdatedOn(new \DateTime($row['updated_on'])); $feed->setBaseId($row['base_id']); $fpStmt->execute([':feed_id' => $row['id']]); $fpRes = $fpStmt->fetchAll(\PDO::FETCH_ASSOC); foreach ($fpRes as $fpRow) { if (null === ($user = $this->loadUser($app['orm.em'], $fpRow['usr_id']))) { continue; } $feedPublisher = new FeedPublisher(); $feedPublisher->setFeed($feed); $feed->addPublisher($feedPublisher); $feedPublisher->setCreatedOn(new \DateTime($fpRow['created_on'])); $feedPublisher->setIsOwner((bool) $fpRow['owner']); $feedPublisher->setUser($user); $feStmt->execute([':feed_id' => $row['id'], ':publisher_id' => $fpRow['id']]); $feRes = $feStmt->fetchAll(\PDO::FETCH_ASSOC); foreach ($feRes as $feRow) { $feedEntry = new FeedEntry(); $feedEntry->setFeed($feed); $feed->addEntry($feedEntry); $feedEntry->setPublisher($feedPublisher); $feedEntry->setTitle($feRow['title']); $feedEntry->setSubtitle($feRow['description']); $feedEntry->setAuthorName((string) $feRow['author_name']); $feedEntry->setAuthorEmail((string) $feRow['author_email']); $feedEntry->setCreatedOn(new \DateTime($feRow['created_on'])); $feedEntry->setUpdatedOn(new \DateTime($feRow['updated_on'])); $fiStmt->execute([':entry_id' => $feRow['id']]); $fiRes = $fiStmt->fetchAll(\PDO::FETCH_ASSOC); foreach ($fiRes as $fiRow) { $feedItem = new FeedItem(); $feedItem->setEntry($feedEntry); $feedEntry->addItem($feedItem); $feedItem->setOrd($fiRow['ord']); $feedItem->setSbasId($fiRow['sbas_id']); $feedItem->setRecordId($fiRow['record_id']); $em->persist($feedItem); } $em->persist($feedEntry); } $em->persist($feedPublisher); } $ftStmt->execute([':feed_id' => $row['id']]); $ftRes = $ftStmt->fetchAll(\PDO::FETCH_ASSOC); foreach ($ftRes as $ftRow) { if (null === ($user = $this->loadUser($app['orm.em'], $ftRow['usr_id']))) { continue; } $token = new FeedToken(); $token->setFeed($feed); $feed->addToken($token); $token->setUser($user); $token->setValue($ftRow['token']); $em->persist($token); } $em->persist($feed); $n++; if ($n % 100 === 0) { $em->flush(); $em->clear(); } } $fiStmt->closeCursor(); $feStmt->closeCursor(); $fpStmt->closeCursor(); $ftStmt->closeCursor(); $faStmt->execute(); $faRes = $faStmt->fetchAll(\PDO::FETCH_ASSOC); foreach ($faRes as $faRow) { if (null === ($user = $this->loadUser($app['orm.em'], $faRow['usr_id']))) { continue; } $token = new AggregateToken(); $token->setUser($user); $token->setValue($faRow['token']); $em->persist($token); } $faStmt->closeCursor(); $em->flush(); $em->clear(); return true; }
/** * {@inheritDoc} */ public function setSubtitle($subtitle) { $this->__initializer__ && $this->__initializer__->__invoke($this, 'setSubtitle', array($subtitle)); return parent::setSubtitle($subtitle); }