summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarco Nassabain <marco.nassabain@hotmail.com>2021-03-04 00:02:21 +0100
committerSean Molenaar <SMillerDev@users.noreply.github.com>2021-04-08 22:31:21 +0200
commitdd818c6203961a82aeef58bcf526aced7b361f04 (patch)
tree323bc44703dec1c44bbef7141215d0c4dbbfc9bf /lib
parent8fd3975907aaaf2808a517b609f13e988ba5c044 (diff)
🚑 Fix circular inclusion: create ShareService
Signed-off-by: Marco Nassabain <marco.nassabain@hotmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/Service/ItemServiceV2.php67
-rw-r--r--lib/Service/ShareService.php115
2 files changed, 115 insertions, 67 deletions
diff --git a/lib/Service/ItemServiceV2.php b/lib/Service/ItemServiceV2.php
index a57f67338..3b1a81400 100644
--- a/lib/Service/ItemServiceV2.php
+++ b/lib/Service/ItemServiceV2.php
@@ -17,7 +17,6 @@ use OCA\News\Db\Feed;
use OCA\News\Db\ListType;
use OCA\News\Db\Item;
use OCA\News\Db\ItemMapperV2;
-use OCA\News\Service\FeedServiceV2;
use OCA\News\Service\Exceptions\ServiceConflictException;
use OCA\News\Service\Exceptions\ServiceNotFoundException;
use OCA\News\Service\Exceptions\ServiceValidationException;
@@ -41,29 +40,19 @@ class ItemServiceV2 extends Service
protected $config;
/**
- * Feeds service.
- *
- * @var FeedServiceV2
- */
- protected $feedService;
-
- /**
* ItemService constructor.
*
* @param ItemMapperV2 $mapper
- * @param FeedServiceV2 $feedService
* @param IConfig $config
* @param LoggerInterface $logger
*/
public function __construct(
ItemMapperV2 $mapper,
- FeedServiceV2 $feedService,
IConfig $config,
LoggerInterface $logger
) {
parent::__construct($mapper, $logger);
$this->config = $config;
- $this->feedService = $feedService;
}
/**
@@ -404,60 +393,4 @@ class ItemServiceV2 extends Service
): array {
return $this->mapper->findAllItems($userId, $type, $limit, $offset, $oldestFirst, $search);
}
-
-
- /**
- * Share an item with a user
- *
- * @param string $userId Item owner
- * @param int $id Item ID
- * @param bool $shareWithId User to share with
- *
- * Sharing by copying - the item is duplicated, and the 'sharedBy'
- * field is filled accordingly.
- * The item is then placed in a dummy feed reserved for items
- * shared with the user
- *
- * @return Item
- * @throws ServiceNotFoundException|ServiceConflictException
- */
- public function share(string $userId, int $id, string $shareWithId): Entity
- {
- // find item to share
- try {
- $item = $this->find($userId, $id);
- } catch (DoesNotExistException $ex) {
- throw ServiceNotFoundException::from($ex);
- }
-
- // duplicate the item
- $sharedItem = clone $item;
-
- // initialize fields
- $sharedItem->setUnread(true);
- $sharedItem->setStarred(false);
- $sharedItem->setSharedBy($userId);
-
- // get 'shared with me' dummy feed
- // TODO: move to feedService->createSharedWithMeFeed() ?
- $feedUrl = 'http://nextcloud/sharedwithme';
- $feed = $this->feedService->findByUrl($shareWithId, $feedUrl);
- if (is_null($feed)) {
- $feed = new Feed();
- $feed->setUserId($shareWithId)
- ->setUrlHash(md5($feedUrl))
- ->setLink($feedUrl)
- ->setUrl($feedUrl)
- ->setTitle('Shared with me')
- ->setAdded(time())
- ->setFolderId(null)
- ->setPreventUpdate(true);
-
- $feed = $this->feedService->insert($feed);
- }
-
- $sharedItem->setFeedId($feed->getId());
-
- return $this->mapper->insert($sharedItem);
- }
}
diff --git a/lib/Service/ShareService.php b/lib/Service/ShareService.php
new file mode 100644
index 000000000..bb9bee241
--- /dev/null
+++ b/lib/Service/ShareService.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Nextcloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Marco Nassabain <marco.nassabain@hotmail.com>
+ */
+
+namespace OCA\News\Service;
+
+use \OCA\News\Db\Item;
+use \OCA\News\Db\Feed;
+
+use \Psr\Log\LoggerInterface;
+
+/**
+ * Class ImportService
+ *
+ * @package OCA\News\Service
+ */
+class ShareService
+{
+ /**
+ * Items service.
+ *
+ * @var ItemServiceV2
+ */
+ protected $itemService;
+
+ /**
+ * Feeds service.
+ *
+ * @var FeedServiceV2
+ */
+ protected $feedService;
+
+ /**
+ * @var LoggerInterface
+ */
+ protected $logger;
+
+ /**
+ * ShareService constructor
+ *
+ * @param FeedServiceV2 $feedService Service for feeds
+ * @param ItemServiceV2 $itemService Service to manage items
+ * @param LoggerInterface $logger Logger
+ */
+ public function __construct(
+ FeedServiceV2 $feedService,
+ ItemServiceV2 $itemService,
+ LoggerInterface $logger
+ ) {
+ $this->itemService = $itemService;
+ $this->feedService = $feedService;
+ $this->logger = $logger;
+ }
+
+ /**
+ * Share an item with a user
+ *
+ * @param string $userId ID of user sharing the item
+ * @param int $id Item ID
+ * @param string $shareWithId ID of user to share with
+ *
+ * Sharing by copying - the item is duplicated, and the 'sharedBy'
+ * field is filled accordingly.
+ * The item is then placed in a dummy feed reserved for items
+ * shared with the user
+ *
+ * @return Item
+ * @throws ServiceNotFoundException|ServiceConflictException
+ */
+ public function shareItemWithUser(string $userId, int $id, string $shareRecipientId)
+ {
+ // find item to share
+ try {
+ $item = $this->itemService->find($userId, $itemId);
+ } catch (DoesNotExistException $ex) {
+ throw ServiceNotFoundException::from($ex);
+ }
+
+ // duplicate the item
+ $sharedItem = clone $item;
+
+ // initialize fields
+ $sharedItem->setUnread(true);
+ $sharedItem->setStarred(false);
+ $sharedItem->setSharedBy($userId);
+
+ // get 'shared with me' dummy feed
+ // TODO: move to feedService->createSharedWithMeFeed() ?
+ $feedUrl = 'http://nextcloud/sharedwithme';
+ $feed = $this->feedService->findByUrl($shareRecipientId, $feedUrl);
+ if (is_null($feed)) {
+ $feed = new Feed();
+ $feed->setUserId($shareRecipientId)
+ ->setUrlHash(md5($feedUrl))
+ ->setLink($feedUrl)
+ ->setUrl($feedUrl)
+ ->setTitle('Shared with me')
+ ->setAdded(time())
+ ->setFolderId(null)
+ ->setPreventUpdate(true);
+
+ $feed = $this->feedService->insert($feed);
+ }
+
+ $sharedItem->setFeedId($feed->getId());
+
+ return $this->itemService->insertOrUpdate($sharedItem);
+ }
+}