Example #1
0
 public function save(Feed $feed)
 {
     $this->init();
     $updateFeed = true;
     // if there are no such feed yet.
     if (!$feed->getId()) {
         if (!($loadedFeed = $this->loadFeedByUrl($feed->getSource()))) {
             $updateFeed = false;
             // sure if there are only mysql it's much more efficient to make through sql variables :)
             $statement = $this->pdo->prepare('insert into Feed (`id`, `source`, `link`, `description`, `title`, ' . '`published_date`,`last_fetched`, `last_modified`) values (null, ?, ?, ?, ?, ?, ?, ?)');
             $statement->execute([$feed->getSource(), $feed->getLink(), $feed->getDescription(), $feed->getTitle(), $this->formatDateTime($feed->getPublishedDate()), $this->formatDateTime($feed->getLastFetched()), $this->formatDateTime($feed->getLastModified())]);
             $feed->setId($this->pdo->lastInsertId());
         } else {
             $feed->setId($loadedFeed->getId());
         }
     }
     $this->pdo->beginTransaction();
     try {
         if ($updateFeed) {
             $statement = $this->pdo->prepare('UPDATE Feed SET `link` = ?, `description` = ?, `title` = ?, ' . '`published_date` = ?, `last_fetched` = ?, `last_modified` = ? WHERE id = ?');
             $statement->execute([$feed->getLink(), $feed->getDescription(), $feed->getTitle(), $this->formatDateTime($feed->getPublishedDate()), $this->formatDateTime($feed->getLastFetched()), $this->formatDateTime($feed->getLastModified()), $feed->getId()]);
         }
         //TODO: collision with same pubdates
         $lastRecord = $this->loadLastItem($feed->getId());
         $statement = $this->pdo->prepare('insert into Record (`id`, `feed_id`, `title`, `content`, `picture`, ' . '`author`, `link`, `guid`, `publication_date`, `tags`) values (null, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
         foreach ($feed->getRecords() as $record) {
             /** @var Record $record */
             if (!$lastRecord || $record->getPublicationDate() > $lastRecord->getPublicationDate()) {
                 $statement->execute([$feed->getId(), $record->getTitle(), $record->getContent(), $record->getPicture(), $record->getAuthor(), $record->getLink(), $record->getGuid(), $this->formatDateTime($record->getPublicationDate()), json_encode($record->getTags())]);
             }
         }
         $this->pdo->commit();
     } catch (\PDOException $e) {
         $this->pdo->rollBack();
     }
 }